hdu1272-小希的迷宫 并查集

来源:互联网 发布:冰点文库软件下载 编辑:程序博客网 时间:2024/06/10 01:26

1272

成迷宫条件:不成环,只有一个父节点(没有孤立的点)

#include<iostream>  using namespace std;  int  pre[100001];  bool t[100001],flag;               //t 用于标记独立块的根结点,flag标记成环  int max1;void init(){    max1 = 0;    flag = false;    memset(t,0,sizeof(t));    for (int i = 1; i <= 100000; i++)        pre[i]=i;}int find(int x){    int r = x;    while (r!=pre[r])        r = pre[r];    return r; }void join(int x,int y){    int fx=find(x),fy=find(y);    if(fx!=fy)        pre[fx ]=fy;    else flag = true;  //成环}void judge(){    int roots = 0;    for (int i = 1; i <= 100000; i++)        if(t[i])            if (i == pre[i])                      roots++;           //判断几个单独的,未联通的点    if(roots>1 || flag) cout<<"No\n";    else cout<<"Yes\n";}int main()  {      int n,m,q;    init();    while (cin>>n>>m)    {        t[n]=t[m]=1;    //输入过的点都标记        if(m==-1&&n==-1)break;        if(m==0&&n==0)        {            judge();            init();            q = 0;            continue;        }        join(n,m);    }    return 0;  }


0 0
原创粉丝点击