| ||||||||||
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 |
为什么我用并查集,压缩了路径可还是TLE呢!??我的程序: #include<stdio.h> #define MAX 2001 int parent[MAX]; void set(int n); int find(int x); void unit(int i,int j); void main() { int N,i,j,n,m,b1,b2,flag; scanf("%d",&N); for(i=0;i<N;i++) { flag=0; scanf("%d%d",&n,&m); set(n); for(j=0;j<m;j++) { scanf("%d%d",&b1,&b2); if(flag==0) { if(find(b1)==find(b2)) flag=1; else unit(find(b1),find(b2)); } } printf("Scenario #%d:\n",i+1); if(flag==1) printf("Suspicious bugs found!\n"); else printf("No suspicious bugs found!\n"); } } void set(int n) { int i; for(i=0;i<=n;i++) parent[i]=-1; } int find(int x) { int i,temp; if(parent[x]>0) i=find(parent[x]); while(i!=x)//压缩路径! { temp=parent[x]; parent[x]=i; } return i; } void unit(int i,int j) { int temp; temp=parent[i]+parent[j]; if(parent[i]>parent[j]) { parent[j]=temp; parent[i]=j; } else { parent[i]=temp; parent[j]=i; } } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator