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

哪位大牛帮个忙,看看这个代码有什么问题,一直wa。谢谢啦

Posted by ct314171238 at 2008-11-03 21:10:34 on Problem 1703
#include <iostream>
#include <stdlib.h>
#define MAX 100001

using namespace std;

int father[MAX],opt[MAX];
//opt表示的应该是i的对立面元素,而不是i所在集合的对立面集合
int getSet(int pos){//pos所在的集合 
    if(pos!=father[pos]){
        father[pos] = getSet(father[pos]);
    }
    return father[pos];
}


int main(int argc, char *argv[])
{
  int t,n,m;
  int i,j,k,ele1,ele2,set1,set2;
  char cmd;
  scanf("%d",&t);
  while(t--){
      scanf("%d%d",&n,&m);
      for(i=0;i<=n;i++){
          father[i] = i;
      }
      memset(opt,0,sizeof(opt));
      
      for(i=1;i<=m;i++){
          getchar();
          scanf("%c%d%d",&cmd,&ele1,&ele2);
          set1 = getSet(ele1);//ele1所在的集合 
          set2 = getSet(ele2);//ele2所在的集合 
          if(cmd=='A'){
              if(set1 == set2) printf("In the same gang.\n");
              else if(set1==getSet(opt[ele2])||set2==getSet(opt[ele1])) printf("In different gangs.\n");
              else printf("Not sure yet.\n");
          }
          else if(cmd=='D'&&set1!=set2){
              if(opt[ele1]==0&&opt[ele2]==0){
                  opt[ele1] = ele2;
                  opt[ele2] = ele1;
                  continue;
              }
              else if(opt[ele1]==0){//已知ele2的一个对立点 
                  opt[ele1] = set2;//ele1的对立点就是ele2所在的集合的根节点 
                  father[ele1] =  getSet(opt[ele2]);//ele1的父节点就是ele2的对立点所在的根节点 
                  opt[ele2] = father[ele1];
                  continue;
              }
              else if(opt[ele2]==0){//已知ele1的一个对立点 
                  opt[ele2] = set1;
                  father[ele2] = getSet(opt[ele1]);
                  opt[ele1] = father[ele2];
                  continue;
              }
              father[ele1] = getSet(opt[ele2]);
              father[ele2] = getSet(opt[ele1]);
              opt[ele1] = father[ele2];
              opt[ele2] = father[ele1];
          }
      }
  }
  system("PAUSE");	
  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