HDU1272 小希的迷宫(基础并查集)

来源:互联网 发布:阿里云服务器快照下载 编辑:程序博客网 时间:2024/04/28 06:36

杭电的图论题目列表,共计500题,努力刷吧

AC 64ms

#include <iostream>#include <cstdlib>#include <cstdio>#include <cstring>#include <algorithm>const int INF = 1e8;using namespace std;int father[100010];bool vis[100010];int findx(int r){    int i = r,j;    while(father[r]!=r)    {         r=father[r];    }    while(father[i]!=r)    {        j = father[i];        father[i] = r;        i = j;    }    return r;}bool Merge(int x,int y){    int fx,fy;    fx=findx(x);    fy=findx(y);    if(fx!=fy){ father[fx]=fy; return 1;}elsereturn 0;}void init(){    for(int i=0;i<100010;i++){father[i]=i;vis[i]=0;}}int main(){int a,b;while(scanf("%d%d",&a,&b)!=EOF){    if(a==-1&&b==-1)            break;    intflag=1,t=0;         if(a==0 && b==0)        {            puts("Yes");            continue;        }init();    intnum = 0;while(1){    if(a==0&&b==0) break;    if(flag)            {if(!vis[a]) num++;  //num记录点数if(!vis[b]) num++;vis[a]=1; vis[b]=1;           if(Merge(a,b)==1)  t++;              //t记录边数            else                flag = 0;            }   scanf("%d%d",&a,&b);}if(num-t==1 &&flag == 1)//满足题意的只能是 点数-边数==1puts("Yes")elseputs("No");}return 0;}


0 0
原创粉丝点击