HDU 1213 How Many Tables(kuangbin带你飞 专题五:并差集)

来源:互联网 发布:网件的访客网络 编辑:程序博客网 时间:2024/05/17 00:17

裸并差集,大意就是要请客什么的,认识的人做一桌,不认识不坐一起,A认识B,B认识C,C认识D这样也算一桌...问需要多少桌....最后找一下有多少个根节点也就是f[i]=i的

#include<cstdio>#include<cstring>#include<cstdlib>#include<cmath>#include<algorithm>#include<iostream>using namespace std;int f[2000];int n,m;void inti(){    for(int i=0;i<=n;i++)        f[i]=i;}int find(int x){    if(x!=f[x])        return f[x]=find(f[x]);    return x;}int main(){    int T;    cin>>T;    while(T--)    {        cin>>n>>m;        inti();        for(int i=0;i<m;i++)        {            int u,v;            cin>>u>>v;            int x=find(u);            int y=find(v);            if(x!=y)                f[x]=y;        }        int ans=0;        for(int i=1;i<=n;i++)        {            if(f[i]==i)                ans++;        }        cout<<ans<<endl;    }}


0 0