设为首页 加入收藏

TOP

poj 1655 树形dp
2015-11-21 00:59:38 来源: 作者: 【 】 浏览:2
Tags:poj 1655 树形

题意相当于给你一棵树 让你求每个点的不同子树上的节点个数吧 注意存边的时候存双向边

?

?

#include
  
   
#include
   
     #include
    
      using namespace std; struct node { int to,next; }A[40010]; int tot,list[20010],mark[20010],n; int add(int a,int b) { A[++tot].to = b; A[tot].next = list[a]; list[a] = tot; return 0; } int dp[20010],subtree[20010]; int max(int a,int b) { return a>b?a:b; } int dfs(int point) { mark[point]=1; int b; int k=list[point]; if(k==-1) {dp[point]=n-1;subtree[point]=0;return 0;} for(;k!=-1;k = A[k].next) { b = A[k].to; if(mark[b]) continue; dfs(b); subtree[point]+=subtree[b]+1; dp[point]=max(dp[point],subtree[b]+1); } dp[point]=max(dp[point],n-subtree[point]-1); return 0; } int main() { int i,j,T; scanf("%d",&T); while(T--) { scanf("%d",&n); tot=1; memset(list,-1,sizeof(list)); memset(mark,0,sizeof(mark)); for(i=1;i
     
      

?

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇快速排序C++实现 下一篇POJ2599 A funny game (图博弈)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: