G++TM。。LTE。。。递归写法TMC++还爆栈
#include<iostream>
#include<cstdio>
#include<stdlib.h>
#include<string.h>
#include<string>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<map>
#include<set>
#include<queue>
#include<vector>
using namespace std;
#define MAX 100005
int f[MAX],flag,sign[MAX];
int find(int x)
{
while(x!=f[x])
x=f[x];
return x;
}
void Union(int x,int y)
{
x=find(x);
y=find(y);
if(x!=y)
f[x]=y;
else flag=0;
}
int main()
{
int i,a,b;
while(cin>>a>>b)
{
if(a==-1&&b==-1) break;
if(a==0&&b==0)
{ cout<<"Yes"<<endl; continue; }
for(i=1;i<MAX;i++)
{
f[i]=i;
sign[i]=0;
}
sign[a]=sign[b]=1;
flag=1;
Union(a,b);
while(cin>>a>>b)
{
if(a==0&&b==0) break;
Union(a,b);
sign[a]=sign[b]=1;
}
int k=0;
for(i=1;i<MAX;i++)
{
if(sign[i]&&f[i]==i)
k++;
if(k>1) flag=0;
}
if(flag) cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}
return 0;
}
本文探讨了递归算法的使用方法,并通过并查集实例展示了其在解决特定问题上的应用。通过实现并查集的查找和合并操作,有效解决了连接问题,为读者提供了深入理解递归和并查集的实践案例。
952

被折叠的 条评论
为什么被折叠?



