首页 > 其他分享 >hdu:小希的迷宫(并查集)

hdu:小希的迷宫(并查集)

时间:2022-12-14 18:12:13浏览次数:50  
标签:房间 hdu 小希 int 查集 fa flag maxn

Problem Description
上次Gardon的迷宫城堡小希玩了很久,现在她也想设计一个迷宫让Gardon来走。但是她设计迷宫的思路不一样,首先她认为所有的通道都应该是双向连通的,就是说如果有一个通道连通了房间A和B,那么既可以通过它从房间A走到房间B,也可以通过它从房间B走到房间A,为了提高难度,小希希望任意两个房间有且仅有一条路径可以相通(除非走了回头路)。小希现在把她的设计图给你,让你帮忙判断她的设计图是否符合她的设计思路。比如下面的例子,前两个是符合条件的,但是最后一个却有两种方法从5到达8。

Input
输入包含多组数据,每组数据是一个以0 0结尾的整数对列表,表示了一条通道连接的两个房间的编号。房间的编号至少为1,且不超过100000。每两组数据之间有一个空行。
整个文件以两个-1结尾。

Output
对于输入的每一组数据,输出仅包括一行。如果该迷宫符合小希的思路,那么输出”Yes”,否则输出”No”。

 

输入样例

6 8  5 3  5 2  6 4
5 6  0 0

8 1  7 3  6 2  8 9  7 5
7 4  7 8  7 6  0 0

3 8  6 8  6 4
5 3  5 6  5 2  0 0

-1 -1

输出样例

Yes
Yes
No

并查集的基本应用若最终由多个集合或成环则不符合,注意本题的房间号可以非连续
附ac代码
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int fa[100050];
int find(int m)
{
    int k,r;
    k=m;
    while(fa[m]!=m)
    {
        m=fa[m];
    }
    while(fa[k]!=m)
    {
        r=k;
        k=fa[k];
        fa[r]=m;
    }
    return m;
}
void merge(int m,int n)
{
    fa[m]=n;
}
void pd2(int m)
{
    int t=0;
    bool flag=1;
    for(int i=1;i<=m;++i)
    {if(fa[i]==0) continue;//考虑有未置点 
    if(find(i)==i) 
     {t++;
     }
    if(t>1) 
    {
        flag=0;break;
    }
    }
    if(flag) printf("Yes\n");
    else printf("No\n");
}
void pd1(bool flag,int m)
{
    if(!flag) printf("No\n");
    else pd2(m);
}
int main()
{
    int m,n,maxn=1,f1,f2;
    bool flag=1;
    //只有输入的是有的房间 
    while(scanf("%d%d",&m,&n)==2)
    {
        if(m==0&&n==0) 
        {pd1(flag,maxn);maxn=1;memset(fa,0,sizeof(fa));flag=1;continue;//flag置1
        }
        if(m==-1&&n==-1) break;
        maxn=max(maxn,max(m,n));
        if(fa[m]==0) fa[m]=m;
        if(fa[n]==0) fa[n]=n;
        f1=find(m);f2=find(n);
        if(f1!=f2) merge(f1,f2);
        else
        {
            flag=0;
            continue;
         }
    }
    return 0; 
}

 

标签:房间,hdu,小希,int,查集,fa,flag,maxn
From: https://www.cnblogs.com/ruoye123456/p/16982885.html

相关文章

  • HDU4801——思维,生成树(口糊)
    //题意:有坐标图上有N个点,每个点有一个收益,要求修n-1条路联通所有点。现在有一个免单机会,即免除一条路的花费,求max(免除花费的路的两端点的收益和/n-1条路的总花费)//思路:......
  • 图论-堆-并查集-2503. 矩阵查询可获得的最大分数
    2503.矩阵查询可获得的最大分数DescriptionDifficulty:困难RelatedTopics:给你一个大小为mxn的整数矩阵grid和一个大小为k的数组queries。找出一个大小......
  • 现在有一个并查集,你需要完成合并和查询操作。
    输入格式:第一行包含两个整数N,M,表示共有N个元素和M个操作。接下来M行,每行包含三个整数zi,xi,yi。当zi=1时,将xi与yi所在的集合合并。当zi=2时,输出xi与yi......
  • hdu:解方程(二分查找)
    ProblemDescription给定方程8x^4+7x^3+2x^2+3x+6==Y,请计算x在[0,100]范围内的解。Input输入数据首先是一个正整数T(1<=T<=100),表示有T组测试数据。接下来T......
  • hdu:人见人爱A^B(快速幂)
    ProblemDescription求A^B的最后三位数表示的整数。说明:A^B的含义是“A的B次方”Input输入数据包含多个测试实例,每个实例占一行,由两个正整数A和B组成(1<=A,B<=10000),如果A......
  • hdu:一个新的斐波那契数列
    ProblemDescription现在,有一个新的斐波那契数列,定义如下:F(0)=7,F(1)=11,F(n)=F(n-1)+F(n-2)(n>=2).Input输入包含多组测试样例,每组测试样例包含一个整数n(n......
  • hdu3555 Bomb --数位dp
    原题链接:​​http://acm.hdu.edu.cn/showproblem.php?pid=3555​​题意:1---n之间的数包含49有多少个。分析:看代码。#define_CRT_SECURE_NO_DEPRECATE#include<iostream>#in......
  • hdu2089 不要62--数位dp入门题
    原题链接:​​http://acm.hdu.edu.cn/showproblem.php?pid=2089​​题意:给定a,b两数,求两数之间所有数不含有62和4的个数。分析:dp[i][j]表示i位数,最高位是j的满足题意的个......
  • hdu4739 Zhuge Liang's Mines --状压dp
    原题链接:​​http://acm.hdu.edu.cn/showproblem.php?pid=4739​​题意:n个点,求出可以组成的最多的正方形的点数,要求每个点只能用一次,且正方形边平行坐标轴。分析:把所有点组......
  • hdu5135 Little Zu Chongzhi's Triangles --状压dp
    原题链接:​​http://acm.hdu.edu.cn/showproblem.php?pid=5135​​题意:n根木棒,组成若干三角形,求最大面积和。分析:把所有木棒升序排序,可以组成三角形所有的的组合利用位运算......