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 |
用并查集In Reply To:有什么办法能不TLE么? TLE了N次,每次都是超时15ms,郁闷呀!! Posted by:zhb_msqx at 2007-08-24 10:34:04 > #include <stdio.h> > #include <iostream> > #include <fstream> > using namespace std; > > int rode[1002][1002]; > int mark[1002]; > int que[1002];//将标记过的点加入到序列里面来 > int qnum; > > int marknum; > int totalcost; > > int n,m; > > bool prim(){ > if(marknum==n)return true; > int max=0; > int next=0; //下一个节点 > for(int i=0;i<qnum;i++){ > int curnode=que[i]; > for(int j=1;j<=n;j++){ > if(rode[curnode][j]!=0&&mark[j]==0){ > if(rode[curnode][j]>max){ > max=rode[curnode][j]; > next=j; > } > } > } > } > if(max==0){ > return false; > }else{ > totalcost+=max; > marknum++; > mark[next]=1; > que[qnum++]=next; > return prim(); > } > > } > > > void main(){ > // ifstream cin("data.txt"); > // cin>>n>>m; > scanf("%d%d",&n,&m); > > memset(rode,0,sizeof(rode)); > memset(mark,0,sizeof(mark)); > marknum=0; > totalcost=0; > > for(int i=0;i<m;i++){ > int f,e,cost; > //cin>>f>>e>>cost; > scanf("%d%d%d",&f,&e,&cost); > rode[f][e]=cost;rode[e][f]=cost; > } > > mark[1]=1; > marknum++; > qnum=0; > que[qnum++]=1; > > if(prim()){ > printf("%d\n",totalcost); > //cout<<totalcost<<endl; > }else{ > printf("-1\n"); > // cout<<-1<<endl; > } > > > } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator