wisdom_grass @ 2017-08-13 17:23:56
代码如下
#include <iostream>
using namespace std;
int n,m;
int z,x,y;
int fuck[10001];
int find(int x)
{
if(fuck[x]!=x)
x=find(fuck[x]);
return x;
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
fuck[i]=i;
for(int i=1;i<=m;i++)
{
cin>>z>>x>>y;
if(z==1)
{
int f1=find(x);
int f2=find(y);
if(f1!=f2)
{
fuck[f2]=f1;
fuck[y]=f1;
}
}
else
{
if(find(x)==find(y))
cout<<"Y\n";
else
cout<<"N\n";
}
}
}
by xun薰 @ 2017-08-13 17:32:20
find函数优化一下路径压缩就可以了
#include <iostream>
using namespace std;
int n,m;
int z,x,y;
int fuck[10001];
int find(int x)
{
return fuck[x]==x?x:fuck[x]=find(fuck[x]);
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
fuck[i]=i;
for(int i=1;i<=m;i++)
{
cin>>z>>x>>y;
if(z==1)
{
int f1=find(x);
int f2=find(y);
if(f1!=f2)
{
fuck[f2]=f1;
fuck[y]=f1;
}
}
else
{
if(find(x)==find(y))
cout<<"Y\n";
else
cout<<"N\n";
}
}
}
by wisdom_grass @ 2017-08-13 18:37:05
谢谢
by wisdom_grass @ 2017-08-13 18:37:24
@。。薰。。 %%%
by xun薰 @ 2017-08-13 19:42:05
@liyuheng 不用谢 最好去了解一下优化的原理哦
by huangxuhan @ 2017-08-26 16:56:34
@。。薰。。 你确定是find而不是。。。。。。
by xun薰 @ 2017-08-26 17:44:18
@huangxuhan 不是什么???
by huangxuhan @ 2017-08-27 10:23:00
@。。薰。。 好吧有两个数组,一个是find,一个是。。。。。。
by huangxuhan @ 2017-08-27 10:23:40
怪不得看起来怪怪的
by nnez_xiaoliwei @ 2017-09-13 19:28:46
getfather系列路过
by Owen_codeisking @ 2017-09-23 09:39:55
f**k的数组