做题记录 牛客小白月赛46 D

 

 思路:dp,设dpu,i代表以u为根,距离为i+1的节点总数。

最后dpu,1要加上所有dpv,0-1,其中v是u的子节点(要-1是为了排除v->u的边)

则每个节点i的答案为dpi,0+dpi,1+1

代码如下:

 1     for(int i=1;i<=n;i++){
 2         for(int j=fir[i]; ~j; j=G[j].nex) {
 3             if(G[j].wei==1)        dp[i][0]++;
 4             elsif(G[j].wei==2)     dp[i][1]++;
 5         }
 6     }
 7     for(int i=1;i<=n;i++){
 8         for(int j=fir[i]; ~j; j=G[j].nex) {
 9             int to=G[j].to;
10             if(G[j].wei==1)    dp[i][1]+=(dp[to][0]-1); //排除j->i的边
11         }
12     }

 

posted @ 2022-04-08 16:38  m0_51303687  阅读(30)  评论(0)    收藏  举报