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 |
Re: C++ 1258 LZIn Reply To: C++ 1258 LZ Posted by:lz1 at 2010-04-09 11:27:09 > /* > LZ 2010-04-09 11:24:28 > Memory Time > 296K 32MS > */ > #include<iostream> > using namespace std; > const int M=101*50+1,L=101; > int n,t,s,Rootx,Rooty,num; > int Sum; > struct MFTNode{ > int x,y; > int w; > }f[M]; > int FATHER[L]; > > int comp(const void*a,const void*b){ > MFTNode *m,*n; > m=(MFTNode*)a; > n=(MFTNode*)b; > return m->w>n->w?1:-1; > } > > void init_fopen(void){ > freopen ("PKU_1258.in","r",stdin); > freopen ("PKU_1258.out","w",stdout); > } > > void solve_init(void){ > s=0; > Sum=0;num=0; > memset(FATHER,0,sizeof (FATHER)); > for (int i=1;i<=n;i++){ > for (int j=1;j<=i;j++)scanf ("%d",&t); > for (int j=i+1;j<=n;j++){ > scanf ("%d",&f[++s].w); > f[s].x=i;f[s].y=j; > } > } > qsort (f+1,s,sizeof (f[0]),comp); > } > > int find(int k){ > if(!FATHER[k]) return k; > return FATHER[k]=find(FATHER[k]); > } > > int main(void){ > init_fopen(); > while (cin>>n){ > solve_init(); > s=1; > while (num<n-1){ > 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); > } > return 0; > } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator