这道题我交了两个版本
一个70分,一个100分
70分代码:
#include<iostream>
using namespace std;
#include<iostream>
using namespace std;
const int N=1e4,M=2e5;
int r[N];
int z,x,y,n,m;
int find(int k){
if(r[k]==k)return k;
return r[k]=find(r[k]);
}
int main()
{
ios::sync_with_stdio(0);
cin>>n>>m;
for(int i=1;i<=n;i++)r[i]=i;
for(int i=0;i<m;i++){
cin>>z>>x>>y;
if(z==1)
r[find(x)]=find(y);
else
if(find(x)==find(y))cout<<"Y"<<endl;
else cout<<"N"<<endl;
}
return 0;
}
100分代码:
#include<iostream>
using namespace std;
#include<iostream>
using namespace std;
const int N=1e4,M=2e5;
int z,x,y,n,m;
int r[N];
int find(int k){
if(r[k]==k)return k;
return r[k]=find(r[k]);
}
int main()
{
ios::sync_with_stdio(0);
cin>>n>>m;
for(int i=1;i<=n;i++)r[i]=i;
for(int i=0;i<m;i++){
cin>>z>>x>>y;
if(z==1)
r[find(x)]=find(y);
else
if(find(x)==find(y))cout<<"Y"<<endl;
else cout<<"N"<<endl;
}
return 0;
}
两份代码唯一的区别在int的定义那两行的顺序不同,为什么会产生30分差距呢?
我复制70分代码,将int r[N] 与int z,x,y,n,m交换行,即可100分通过。
可能是我基础太薄弱,真的不知道改如何分析这种情况。