2013年9月24日 星期二

TIOJ 1312 家族

[Disjoint Set]
這題有多筆測資這題有多筆測資這題有多筆測資這題有多筆測資這題有多筆測資
^
搞我半小時QAQ


#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct node
{
 int father;
};
struct node lst[10001];
int cycle[10001];
int findfather(int a)
{
 if(lst[a].father==a)
  return a;
 lst[a].father=findfather(lst[a].father);
 return lst[a].father;
}
int setup(int a,int b)
{
 int fa=findfather(a);
 int fb=findfather(b);
 if(fa==fb)
  return 0;
 if(fb<fa)
  lst[fa].father=fb;
 else
  lst[fb].father=fa;
}

int main()
{
 int n,p;
 int x,y;
 int q;
 while(scanf("%d %d",&n,&p)==2)
 {
  for(int lx=1;lx<=n;lx++)
   lst[lx].father=lx;
  for(int lx=1;lx<=p;lx++)
  {
   scanf("%d %d",&x,&y);
   setup(x,y);
  }
  scanf("%d",&q);
  printf("%d\n",findfather(q));
 }

 return 0;
}

沒有留言:

張貼留言