hdu 1213 并查集入门题

来源:互联网 发布:桌面透明软件下载 编辑:程序博客网 时间:2024/06/04 00:10

这道题很简单,显然是并查集入门题,

思路如下,总桌子数为n,最开始把n个人作为n个独立的集合,然后如果两两可以合并,桌子总数减一。

附上代码

#include <iostream>
#include <stdio.h>
using namespace std;
int f[1100];
int n,m;
int find(int x)
{
 if(f[x]!=x)
    f[x]=find(f[x]);
 return f[x];
}
void make(int a,int b)
{
  int f1=find(a);
  int f2=find(b);
  if(f1!=f2)
  {
    f[f1]=f2;
    n--;
  }
}
int main()
{
  int t;
  cin>>t;
  while(t--)
  {
    cin>>n>>m;
    for(int i=1;i<=n;i++)
        f[i]=i;
    for(int i=0;i<m;i++)
    {
       int a,b;
       cin>>a>>b;
       make(a,b); 
    }
    cout<<n<<endl;
  }
  return 0;  
}

0 0
原创粉丝点击