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 |
Kruskal#include<iostream> using namespace std; const int M=10005,L=101; int n,m,s,Rootx,Rooty,num,Sum; struct MFTNode{ int x,y; int w; }f[M]; int FATHER[L]; int comp(const void*a,const void*b){ MFTNode *d,*q; d=(MFTNode*)a; q=(MFTNode*)b; return d->w>q->w?1:-1; } void init_fopen(void){ freopen ("PKU_1287.in","r",stdin); freopen ("PKU_1287.out","w",stdout); } void solve_init(void){ scanf ("%d",&m); Sum=0;num=0; memset(FATHER,0,sizeof (FATHER)); for (int i=1;i<=m;i++)scanf ("%d%d%d",&f[i].x,&f[i].y,&f[i].w); qsort (f+1,m,sizeof (f[0]),comp); } int find(int k){ if(!FATHER[k]) return k; return FATHER[k]=find(FATHER[k]); } int main(void){ init_fopen(); scanf ("%d",&n); while (n){ solve_init(); s=1; while (num<n-1&&s<=m){ Rootx=find(f[s].x); Rooty=find(f[s].y); if(Rootx!=Rooty){ num++; Sum+=f[s].w; FATHER[Rooty]=Rootx; } s++; } printf ("%d\n",Sum); scanf ("%d",&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