Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

也用的并差集为什么会wrong answer呢?帮忙看看

Posted by lqiaosh at 2009-05-14 08:33:10 on Problem 1703
#include<stdio.h>
#define max 100005
int p[max];
int link[max];
int opp[max];
//bool is[max];
int find(int x)
{
 while(x!=p[x])x=p[x];
 return x;
}
void unio(int a,int b)
{
 int root1,root2;
 root1=find(a);
 root2=find(b);
 if(link[root1]<link[root2])
	 p[root1]=root2;
 else 
 {
  p[root2]=root1;
  if(link[root1]=link[root2])
	  link[root1]++;
 }
}
int main()
{
 int n;
 scanf("%d",&n);
 while(n--)
 {
  int flag=0;
  int num,test,b,g;
  int i;
  char c[3];
  scanf("%d%d",&num,&test);
  for(i=0;i<=num;i++)
  {
    p[i]=i;
	link[i]=1;
	opp[i]=0;
//	is[i]=false;
  }
  for(i=0;i<test;i++)
  {
	 getchar();
   scanf("%s",c);
  // printf("fffffff%s\n",c);
   if(c[0]=='A')
   {
	 int root1,root2;
     scanf("%d%d",&b,&g);
	 root1=find(b);
	 root2=find(g);
	 if(root1==root2)printf("In the same gang.\n");
	 else if(root1==find(opp[root2]))printf("In different gangs.\n");
	else printf("Not sure yet.\n");
   }
   else 
   {
	  scanf("%d%d",&b,&g);
	 // is[b]=is[g]=true;
     if(opp[b]!=0)
     {
      unio(opp[b],g);
	  //continue;
     }
     if(opp[g]!=0)
	 {
       unio(opp[g],b);
	    //continue;
     }
	 else 
	 {
		 opp[g]=b;
	     opp[b]=g;
	 }
   }
  }
 
 }
 return 0;
}

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator