先开个数组x[i]记录每一点的值,初始化为1
从任意某个点p开始深搜,找与它相邻且未被访问过的点q,w[p]=w[p]*(1+w[q])
void dfs(int p){
for(int i=0;i<v[p].size();++i){
if(vis[v[p][i]]==0){
vis[v[p][i]]=1;
dfs(v[p][i]);
x[p]=x[p]*(x[v[p][i]]+1)%mod;
}
}
s=(s+x[p])%mod;
}
先开个数组x[i]记录每一点的值,初始化为1
从任意某个点p开始深搜,找与它相邻且未被访问过的点q,w[p]=w[p]*(1+w[q])
void dfs(int p){
for(int i=0;i<v[p].size();++i){
if(vis[v[p][i]]==0){
vis[v[p][i]]=1;
dfs(v[p][i]);
x[p]=x[p]*(x[v[p][i]]+1)%mod;
}
}
s=(s+x[p])%mod;
}