HDU 1272 小希迷宫(并检查集合)

本文探讨了将意甲冠军的概念与无向图的无环和连接特性相结合,通过实例展示了如何解决相关算法问题,并提供了解决方案及优化策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

意甲冠军:被判处无向图无环和连接无处不在

思考:并检查集合,trap 您可能有一个直接输入0 0

并且....合并的时候按某一个方向会爆栈,爆了好几次...下次考虑一下直接递归找祖先吧

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int N =1e5+1e2;
int fa[N];
int getf(int x)
{
    return x==fa[x]?

x:fa[x]=getf(fa[x]); } int Merge(int x,int y) { int t1=getf(x); int t2=getf(y); if(t1==t2) return false; fa[t2]=t1; return true; } bool vis[N]; bool flag; int cnt; void ini() { for(int i=1;i<100005;i++) fa[i]=i; flag=true; cnt=0; memset(vis,0,sizeof(vis)); } int main() { int u,v; while(scanf("%d%d",&u,&v),~u) { if(!(u||v)) { puts("Yes"); continue; } ini(); vis[u]=vis[v]=true; flag=Merge(u,v); while(scanf("%d%d",&u,&v),(u||v)) { vis[u]=vis[v]=true; if(!flag) continue; flag=Merge(u,v); } if(flag) for(int i=1;i<100005;i++) if(vis[i]&&fa[i]==i) cnt++; if(cnt>1) flag=0; if(flag) puts("Yes"); else puts("No"); } return 0; }



版权声明:本文博主原创文章。博客,未经同意不得转载。

转载于:https://www.cnblogs.com/bhlsheji/p/4887923.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值