HDOJ6986Kanade Loves Maze Designing(暴力,dfs树)

Posted 小哈里

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HDOJ6986Kanade Loves Maze Designing(暴力,dfs树)相关的知识,希望对你有一定的参考价值。

1002 Kanade Loves Maze Designing 35.26%(880/2496)

题意:

  • 给出一棵n个点的树,每个点有权值ci,记A(i,j)表示点i和j之间路径上的不同权值个数,求f(i,x)=∑(j=1->n) A(i,j)*x^{j−1},x=19560929, mod1=1e9+7, mod2=1e9+9.

思路:

  • 因为n<2e3,可以n^2做,所以直接dfs暴力把所有的a[i][j] 枚举出来即可,O(n)枚举每个点,对于每个点dfs到其他所有点跑一遍O(n), 递归的时候开个数组记录路径上的不同权值个数,回溯的时候减掉即可。
  • 对于最后的取模运算,因为多组数据所以可以提前预处理。
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;

LL a[2020][2020], c[2020];
vector<int>G[2020];

int rt, cnt, ma[2020];
void dfs(int x, int fa){
    if(ma[c[x]]==0)cnt++;
    ma[c[x]]++; 
    a[rt][x] = cnt;
    for(int to : G[x]){
        if(to!=fa)dfs(to,x);
    }
    ma[c[x]]--;
    if(ma[c[x]]==0)cnt--;
}

const LL p1=1e9+7, p2=1e9+9;
LL pow2(LL a,LL b,LL mod){LL r=1;while(b){if(b&1)r=r*a%mod;a=a*a%mod;b>>=1;}return r%mod;}
LL x=19560929;
LL xa[2005],xb[2005];

int main(){    
    for(int i=0;i<=2000;i++)
        xa[i]=pow2(x,i,1e9+7),xb[i]=pow2(x,i,1e9+9);
    
    ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    int T;  cin>>T;
    while(T--){
        int n;  cin>>n;
        for(int i = 1; i <= n; i++)G[i].clear();//init
        for(int i = 2; i <= n; i++){
            int x;  cin>>x;
            G[i].push_back(x); G[x].push_back(i);
        }
        for(int i = 1; i <= n; i++)cin>>c[i];
        for(int i = 1; i <= n; i++){
            rt = i;  dfs(i,0);
        }
        for(int i = 1; i <= n; i++){
            LL ans1 = 0, ans2 = 0;
            for(int j = 1; j <= n; j++){
                ans1 = ((ans1+a[i][j]*xa[j-1]%p1)%p1+p1)%p1;
                ans2 = ((ans2+a[i][j]*xb[j-1]%p2)%p2+p2)%p2;
            }
            cout<<ans1<<" "<<ans2<<"\\n";
        }
    }
    return 0;
}

以上是关于HDOJ6986Kanade Loves Maze Designing(暴力,dfs树)的主要内容,如果未能解决你的问题,请参考以下文章

hdoj 5094 Maze BFS + 状态压缩 好多坑

HDOJ5657 CA Loves Math

[HDOJ5094] Maze (记忆化搜索,BFS,状态压缩)

[HDOJ5676]ztr loves lucky numbers(状压枚举,打表,二分)

HDOJ7079Pty loves lines(计算直线的交点方案数,打表)

OpenCV 中的 Lucas-Kanade 光流对我不起作用