zhmshitiancai @ 2016-10-30 14:43:42
#include<cstdio>
#include<iostream>
using namespace std;
int p[1000000+1];
void make(int x)
{
p[x]=x;
}
int find(int x)
{
if(x!=p[x]) find(p[x]);
return p[x];
}
void union_set(int x,int y)
{
x=find(x);
y=find(y);
p[x]=y;
}
int main()
{
int n,m,zi,x,y;
cin>>n>>m;
for(int i=1;i<=m;i++)
{
cin>>zi>>x>>y;
cout<<endl;
if(zi==1)
{
if(p[x]==0)
make(x);
if(p[y]==0);
make(y);
union_set(x,y);
}
if(zi==2)
{
if(p[x]==0||p[y]==0)
printf("N\n");
else
{
if(find(x)==find(y))
printf("Y\n");
else
printf("N\n");
}
}
for(int j=1;j<=4;j++)
printf("%d",p[j]);
cout<<endl;
}
}
by Red_w1nE @ 2016-10-30 14:55:28
一点都不解释自己代码的意思就一股脑发过来 谁想看啊
by yang2016 @ 2016-11-04 21:39:08
提交前检查一下,自己测试的数据有没有删除。
错了两处:cin>>zi>>x>>y下面的换行符去掉
最后的 for(int j=1;j<=4;j++)
printf("%d",p[j]);去掉
提交之前检查一下,自己测试一下
by yang2016 @ 2016-11-05 20:13:58
#include<cstdio>
#include<iostream>
using namespace std;
int p[1000000+1];
int find(int x)
{
if(x==p[x])return x;
p[x]=find(p[x]);
return p[x];
}
int main()
{
int n,m,zi,x,y;
cin>>n>>m;
for(int i=1;i<=n;i++) p[i]=i;
for(int i=1;i<=m;i++)
{
cin>>zi>>x>>y;
int xx=find(x);
int yy=find(y);
if(zi==1)
if(xx!=yy)p[xx]=yy;
if(zi==2)
{
if(p[xx]==p[yy])printf("Y\n");
else printf("N\n");
}
//for(int j=1;j<=4;j++)cout<<p[j]<<' ';
}
}
by yang2016 @ 2016-11-05 20:14:51
帮你改了一下,主要是没有初始化,还有合并时的find函数问题