HDU-4118-Holiday's Accommodation
2013-10-03 22:41
302 查看
这个题足以说明我的树形DP之渣~~半天都没想出来,后来一晃眼别人的代码一下子就想到了~
唉~无限悲伤~他们写的都比我好,思路都一样的~
代码:
唉~无限悲伤~他们写的都比我好,思路都一样的~
代码:
#include<cstdio> #include<cstring> #include<iostream> using namespace std; const int maxn=1e5+100; int n,e,head[maxn],pnt[maxn*2],nxt[maxn*2],cost[maxn*2],cnt[maxn],s[maxn]; long long ans; bool vis[maxn]; void AddEdge(int u,int v,int c) { pnt[e]=v;nxt[e]=head[u];cost[e]=c;head[u]=e++; } void DFS(int u) { memset(cnt,0,sizeof(cnt)); int top=0; s[top++]=u; vis[u]=1; while(top) { int u=s[top-1]; int flag=0; for(int i=head[u];i!=-1;i=nxt[i]) if(!vis[pnt[i]]) { flag=1; vis[pnt[i]]=1; s[top++]=pnt[i]; } if(flag) continue; top--; for(int i=head[u];i!=-1;i=nxt[i]) { cnt[u]+=cnt[pnt[i]]; ans+=min(cnt[pnt[i]],n-cnt[pnt[i]])*cost[i]; } cnt[u]++; } } int main() { int T,cas=1; scanf("%d",&T); while(T--) { e=ans=0; memset(head,-1,sizeof(head)); memset(vis,0,sizeof(vis)); scanf("%d",&n); for(int i=1;i<n;i++) { int u,v,c; scanf("%d%d%d",&u,&v,&c); AddEdge(u,v,c); AddEdge(v,u,c); } DFS(1); printf("Case #%d: %lld\n",cas++,ans*2); } return 0; }
相关文章推荐
- HDU 4118 Holiday's Accommodation (2011年成都赛区现场赛H题)
- hdu 4118 Holiday's Accommodation 树上统计
- HDU 4118--Holiday's Accommodation(树形dp)
- HDU - 4118 Holiday's Accommodation
- hdu Holiday's Accommodation dfs
- HDU4118:Holiday's Accommodation(思维 & dfs)
- UVA 1669 && HDU 4118 Holiday's Accommodatio (思路题目--统计子树结点 )
- hdu 4118 Holiday's Accommodation
- HDU - 4118 Holiday's Accommodation
- Holiday's Accommodation
- HDU FatMouse' Trade
- HDU - 5187 - zhx's contest
- hdu 4633 Who's Aunt Zhang 【polya计数】
- hdu 4726 Kia's Calculation (贪心)
- HDU 5172 GTY's gay friends (预处理+线段树)
- hdu 2732 Leapin' Lizards
- hdu 2732 Leapin' Lizards(最大流)
- Hdu 5187 zhx's contest(数学)
- POJ 2388 && HDU 1157 Who's in the Middle(水~)
- hdu 1009 FatMouse' Trade