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 |
为什么WA啊?郁闷#include <stdio.h> #include <memory.h> #include <stdlib.h> struct EDGES { int from; int to; int w; }edges[5051]; int p[101]; int cmp(const void* a ,const void* b) { struct EDGES* l = (EDGES*) a; struct EDGES* r = (EDGES*) b; return l->w - r->w; } int root(int x) { int r = x; while(p[r]!=r) r = p[r]; while(x!=r) { int k = p[x]; p[x] = r; x = k; } return r; } int main() { int i,j,k,n,m,c=0,q,ret=0; for(i=1; i<101; i++) p[i] = i; scanf("%d", &n); for(i=1; i<=n; i++) for(j=1; j<=n; j++) { scanf("%d", &m); if(j>i) { edges[++c].from = i; edges[c].to = j; edges[c].w = m; } } qsort(edges+1, c, sizeof(EDGES), cmp); scanf("%d", &q); for(i=1; i<=q; i++) { scanf("%d %d", &j , &k); int x = root(j); int y = root(k); if(x!=y) p[j] = k; //union; } //kruskal for(i=1; i<=c; i++) { int x = root(edges[i].from); int y = root(edges[i].to); if(x!=y) { p[x] = y; ret += edges[i].w; } } printf("%d\n", ret); return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator