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 |
求测试数据, 2天了,xxxxxxxxxxxxxxxxx谢//求测试数据, 2天了,xxxxxxxxxxxxxxxxx谢 #include<iostream> using namespace std; int c[1010], pre[1010], next[1010]; double c1[1010]; int n, r; int findmax(double c1[])//非r的最大节点 { int i, th; double max; max = 0; th = 0; for(i = 1; i <= n; i++) { if(c1[i] > max && i != r) { max = c1[i]; th = i; } } return th; } void uni(int d, int pred) { int i; for(i = 1; i <= n; i++) if(pre[i] == d) pre[i] = pred; if(pred != r) c1[pred] = (c1[d] + c1[pred])/2; c1[d] = 0; for(i = pred; next[i] != 0; i = next[i]); next[i] = d; } int main() { int i, d, e, sum; cin>>n>>r; while(n || r) { pre[r] = r; memset(next, 0, sizeof(next)); for(i = 1; i <= n; i++) { scanf("%d", &c[i]); c1[i] = c[i]; } for(i = 1; i < n; i++) { scanf("%d%d", &d, &e); pre[e] = d; } for(i = 1; i < n; i++) { d = findmax(c1); uni(d, pre[d]); } sum = 0; d = 1; for(i = r; i != 0; i = next[i]) { sum += d*c[i]; d++; } cout<<sum<<endl; cin>>n>>r; } return 0; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator