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 <algorithm> #define MAXN 1001 int vexnum,edgenum,parent[MAXN]; using namespace std; typedef struct { int s,e,c; }Edge; Edge de[15001]; bool cmp(Edge i,Edge j) { if(i.c<j.c) return true; return false; } void Initial(int N) { int i,j; sort(de,de+edgenum,cmp); for(i=1;i<=N;++i) parent[i]=i; } int FindRoot(int x) { if(x!=parent[x]) parent[x]=FindRoot(parent[x]); return parent[x]; } bool Union(int i,int j) { int x=FindRoot(i),y=FindRoot(j); if(x==y) return false; parent[x]=y; return true; } void kruskal() { int i,k; int s[MAXN],num=0; for(i=0;i<edgenum;++i) { if(Union(de[i].s,de[i].e)==true) s[num++]=i; if(num>vexnum-1) break; } printf("%d\n",de[s[num-1]].c); printf("%d\n",num); for(i=0;i<num;++i) printf("%d %d\n",de[s[i]].s,de[s[i]].e); } int main() { int N,i,M; int a,b,c; scanf("%d %d",&N,&M); vexnum=N,edgenum=M; for(i=0;i<M;++i) scanf("%d %d %d",&de[i].s,&de[i].e,&de[i].c); Initial(N); kruskal(); return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator