运行超时,怎么优化这段代码?这是并查集问题,或者有没有别的方法。
提供你的思路和方法
=================
问题如下
代码如下
#include<bits/stdc++.h>
using namespace std;
int s[5010];
void init_set(){
for(int i=1;i<=5010;i++){
s[i]=i;
}
}
bool fd(int x,int y){
if(s[x]==x&&s[y]==y) return false;
if(s[x]==s[y]) return true;
else return fd(s[x],y);
}
int find_set(int x){
if(x!=s[x]) s[x]=find_set(s[x]);
return s[x];
}
void merge_set(int x,int y){
int sx,sy;
sx=find_set(x);sy=find_set(y);
if(sx!=sy) s[x]=s[y];
}
int main(){
int n,m,q;
cin>>n>>m>>q;
init_set();
while(m--){
int x,y;
cin>>x>>y;
merge_set(x,y);
}
while(q--){
int i,j;
cin>>i>>j;
if(fd(i,j))cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
}