hdu 1213 HOW MANY TABLES

来源:互联网 发布:地图软件怎么赚钱 编辑:程序博客网 时间:2024/06/10 02:06

题目链接:点击打开链接


并查集模板题。

FInd函数写递归路径压缩的竟然会爆栈。。只能写朴素的

查的时候每访问到一个元素x就把vis[x]变成1,这样最后查询的时候vis是1的就不用查了,查出来的结果vis如果是0 ,res就加1,再把它的vis变为1.

代码:

#include <iostream>#include <cstdio>using namespace std;int Fa[1010];int N,M;bool vis[1010];int Find(int n){    while(n!=Fa[n]){        vis[n]=1;        n=Fa[n];    }    return n;}void init(){    for(int i=1;i<=N;i++){            Fa[i]=i;            vis[i]=0;    }}int solve(){    for(int i=1;i<=N;i++) vis[i]=0;    int res=0;    for(int i=1;i<=N;i++){        if(vis[i]) continue;        int t=Find(i);        if(!vis[t]){ res++;  vis[t]=1;}    }    return res;}int main(){    int T;    cin>>T;    while(T--){        cin>>N>>M;        int x,y;        init();        for(int i=1;i<=M;i++){                cin>>x>>y;                int t1=Find(x);                int t2=Find(y);                Fa[t1]=t2;        }        cout<<solve()<<endl;    }    return 0;}


0 0
原创粉丝点击