有个地方不懂,求解释
查看原帖
有个地方不懂,求解释
1259477
qiuxiangyu2010楼主2024/7/31 11:22

有个地方不明白:

#include<bits/stdc++.h>
using namespace std;
int n,m,p,f[5010];
int find(int x){
	if(f[x]==x){
		return x;
	}
	f[x]=find(f[x]);
	return f[x];
} 
int main(){
	scanf("%d%d%d",&n,&m,&p);
	for(int i=1;i<=n;i++){
		f[i]=i;
	}
	int x,y;
	for(int i=1;i<=m;i++){
		cin>>x>>y;
		f[find(x)]=f[y];//只有此处不同
	}
	for(int i=1;i<=p;i++){
		cin>>x>>y;
		if(find(x)==find(y)){
			cout<<"Yes\n";
		}else{
			cout<<"No\n"; 
		}
	}
	return 0;
}

只有 20pts ,其他点全 MLE ,然而

#include<bits/stdc++.h>
using namespace std;
int n,m,p,f[5010];
int find(int x){
	if(f[x]==x){
		return x;
	}
	f[x]=find(f[x]);
	return f[x];
} 
int main(){
	scanf("%d%d%d",&n,&m,&p);
	for(int i=1;i<=n;i++){
		f[i]=i;
	}
	int x,y;
	for(int i=1;i<=m;i++){
		cin>>x>>y;
		f[find(x)]=f[find(y)];//只有此处不同
	}
	for(int i=1;i<=p;i++){
		cin>>x>>y;
		if(find(x)==find(y)){
			cout<<"Yes\n";
		}else{
			cout<<"No\n"; 
		}
	}
	return 0;
}

就 AC 了 ...

所以说 , 有啥区别呢?

2024/7/31 11:22
加载中...