[HDU - 1272]小希的迷宫

基础并查集

要注意的点就是成环和空集,成环即Union拥有相同的根的两个点必然就会成环,此时是输出“NO”的。

而空集是要输出“YES”的。

复制代码
#include <bits/stdc++.h>

using namespace std;
int ok;
int fa[100000 + 10];
int vis[100000 + 10];
int Find(int a)
{
    int r=a;
    while(fa[r]!=r)
        r=fa[r];
    int i=a;
    int j;

    while(i!=r)
    {
        j=fa[i];
        fa[i]=r;
        i=j;
    }
    return r;

}
void merge(int a,int b)
{
    int A,B;
    A=Find(a);
    B=Find(b);
    if(A!=B) fa[B]=A;
    else ok=1;
    
}

int main()
{
    int temp1, temp2;
    while (~scanf("%d %d", &temp1, &temp2))
    {
        if(temp1==0&&temp2==0)
        {
            printf("Yes\n");
            continue;
        }

        if (temp1 + temp2 == -2)
            break;
        ok = 0;
        int a = temp1, b = temp2;
        for (int i = 1; i <= 100000; i++)
        {
            fa[i] = i;
            vis[i] = 0;
        }
        merge(a, b);
        vis[a] = 1;
        vis[b] = 1;
        int flag = 0;

        while (scanf("%d %d", &a, &b))
        {
            if (!a && !b)
                break;
            vis[a] = 1;
            vis[b] = 1;
            merge(a,b);
        }
        if (ok)
        {
            printf("No\n");
            continue;
        }
        int total = 0;
        for (int i = 1; i <= 100000; i++)
            if (vis[i] && fa[i] == i)
                total++;

        if (total != 1)
            printf("No\n");
        else
            printf("Yes\n");
    }
    return 0;
}
复制代码

 

posted @   ViKyanite  阅读(132)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示
主题色彩