| ||||||||||
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啊???痛苦死了!!#include<stdio.h> int diff[2002],same[2002]; int Find(int x, int a);//a==1 stands for diff[], and 0 for same!! void Union(int x,int y,int a); void main() { int x,y,px,py,i,j,N,n,m,flag; scanf("%d",&N); for(j=1;j<=N;j++) { scanf("%d%d",&n,&m); flag=0; for(i=1;i<=n;i++) diff[i]=same[i]=-100000; for(i=0;i<m;i++) { scanf("%d%d",&x,&y); if(flag==0) { if(Find(x,0)==Find(y,0)) flag=1; else { if(diff[x]==-100000&&diff[y]==-100000) { Union(x,y,1); if(Find(x,1)==x) diff[x]=-y; else diff[y]=-x; } else { px=Find(x,1); py=Find(y,1); if(diff[px]!=-100000) { if(px!=x) Union(px,py,0); else Union((-diff[px]),py,0); } if(diff[py]!=-100000) { if(py!=y) Union(py,px,0); else Union((-diff[py]),px,0); } } } } } if(flag==1) printf("Scenario #%d:\nSuspicious bugs found!\n",j); else printf("Scenario #%d:\nNo suspicious bugs found!\n",j); } } int Find(int x, int a) { if(a==0) { if(same[x]<0) return x; else same[x]=Find(same[x],a); return same[x]; } else { if(diff[x]<0) return x; else diff[x]=Find(diff[x],a); return diff[x]; } } void Union(int x,int y,int a) { int temp; if(x==y) return; if(a==0) { temp=same[x]+same[y]; if(same[x]>same[y]) { same[x]=y; same[y]=temp; } else { same[y]=x; same[x]=temp; } } else { temp=diff[x]+diff[y]; if(diff[x]>diff[y]) { diff[x]=y; diff[y]=temp; } else { diff[y]=x; diff[x]=temp; } } } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator