做题记录 牛客小白月赛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 }

浙公网安备 33010602011771号