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 |
PE的不行了,咋回事》?#include<iostream> using namespace std; #define maxn 3000 struct node { int beg, end, weight; } edge[maxn]; int cmp(const void *a,const void *b) { struct node *aa=(node *)a; struct node *bb=(node *)b; return(((aa->weight)<(bb->weight))?1:-1); } int uset[maxn]; int root(int v) { if(uset[v]==v) return v; else { uset[v]=root(uset[v]); return uset[v]; } } bool same(int a, int b) { return root(a)==root(b); } void unite(int a,int b) { if(same(a,b)) return; uset[uset[b]]=uset[a]; } void kruskal(int N,int E) { qsort(edge, E,sizeof(edge[0]), cmp); int i, ct(0); for(i=0; i<=N;i++) uset[i] = i; int ans=0; for(i=0;i<E;i++) { if(same(edge[i].beg, edge[i].end) ) continue; ct++; if(ct==N) break; unite(edge[i].beg, edge[i].end); ans+=edge[i].weight; } cout<<ans<<endl; } int main() { int node[maxn]; int m,n,i,a,b; int c; cin>>m>>n; memset(node,0,sizeof(node)); for(i=0;i<n;i++) { cin>>a>>b>>c; node[a]++; node[b]++; edge[i].beg=a; edge[i].end=b; edge[i].weight=c; } for(i=1;i<=m;i++) { if(node[i]==0) { cout<<"-1"<<endl; return 0; } } kruskal(m,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