Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
谁帮忙看看吧,大谢!#include<stdio.h> #include<vector> #include<queue> using namespace std; struct Node { __int64 value; bool ext; int parent;//记录父节点 int son;//纪录儿子节点数目 vector<int> next; }; Node node[100001]; int temp[100001]; int N,M; int TOTAL; void input() { int i,a,b; for( i = 1; i <= N; i++ ) { scanf("%I64d",&node[i].value); TOTAL += node[i].value; } for( i = 1; i <= M; i++ ) { scanf("%d %d",&a,&b); node[a].next.push_back(b); node[b].next.push_back(a); } queue<int> que; que.push(1); node[1].ext = true; while(que.size()>0)//广搜构建一棵树 { int par = que.front(); for( i = 0; i < node[par].next.size(); i++ ) { int son = node[par].next[i]; if ( node[son].ext == false ) { node[son].ext = true; que.push(son); node[par].son++; node[son].parent = par; } } que.pop(); } } __int64 run() { int i,c; c = 0; int end = N; for( i = 1; i <= N; i++ )//找到所有叶子节点 { if ( node[i].son == 0 ) temp[c++] = i; } int newc = 0; end -= c; while(end) { for( i = 0; i < c; i++ ) { int son = temp[i]; int par = node[son].parent; node[par].value += node[son].value;//把每个叶子节点的值加到父节点 node[par].son--; if ( node[par].son == 0 )//当所有儿子节点加完,该点变成叶子节点 temp[newc++] = par; } c = newc; newc = 0; end -= c; } __int64 minD = TOTAL; for( i = 1; i <= N; i++ ) { __int64 dif = TOTAL - node[i].value; if ( dif > node[i].value ) dif -= node[i].value; else dif = node[i].value - dif; if ( dif < minD ) minD = dif; } return minD; } int main() { int cas = 0,i; while(1) { cas++; scanf("%d %d",&N,&M); if ( N == 0 && M == 0 ) break; TOTAL = 0; for( i = 0; i <= N; i++ ) { node[i].son = 0; node[i].ext = false; node[i].next.clear(); } input(); __int64 re = run();; if ( N == 1 ) re = node[1].value; printf("Case %d: %I64d\n",cas,re); } return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator