| ||||||||||
| 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 | |||||||||
偶也是..In Reply To:为啥我按这个方法wa了...用并查集查找连通分量,然后按照度平均分来着.... Posted by:z12y12l12 at 2007-09-06 14:54:25 > #include <stdio.h>
> #include <string.h>
>
> int n, m;
> int d[101];
> int x[101];
> int father[101];
> int sum[101];
> int num[101];
>
> int ancestor(int i){
> int stack[100];
> int top = 0;
> while(father[i] > 0){
> stack[top++] = i;
> i = father[i];
> }
> while(top-- > 0){
> father[stack[top]] = i;
> }
> return i;
> }
>
> int main(){
> int i;
> int t, o;
> int cs;
> scanf("%d", &cs);
> while(cs-- > 0){
> memset(d, 0, sizeof(d));
> memset(father, 0, sizeof(father));
> memset(sum, 0, sizeof(sum));
> memset(num, 0, sizeof(num));
> scanf("%d%d", &n, &m);
> for(i = 1; i <= n; i++){
> scanf("%d", &x[i]);
> }
> for(i = 0; i < m; i++){
> scanf("%d%d", &t, &o);
> d[t]++;
> d[o]++;
> if(ancestor(t) != ancestor(o)){
> father[ancestor(t)] = ancestor(o);
> }
> }
> for(i = 1; i <= n; i++){
> t = ancestor(i);
> num[t] += d[i];
> sum[t] += x[i];
> }
> for(i = 1; i <= n; i++){
> t = ancestor(i);
> if(d[i] > 0)
> printf("%.3lf\n", (double)sum[t] / num[t] * d[i]);
> else
> printf("%.3lf\n", (double)sum[t]);
> }
> printf("\n");
> }
> return 0;
> }
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator