o斑马还没睡 2024-03-28 22:59 采纳率: 50%
浏览 12
已结题

并查集问题,怎么优化代码

运行超时,怎么优化这段代码?这是并查集问题,或者有没有别的方法。
提供你的思路和方法
=================
问题如下

img


代码如下


#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;
    }
}
  • 写回答

5条回答 默认 最新

  • Mr_Dwj 2024-03-29 18:51
    关注

    为什么 if(fd(i,j))cout<<"YES"<<endl; 不直接写成 if(find_set(i) == find_set(j)cout<<"YES"<<endl;

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 4月16日
  • 已采纳回答 4月8日
  • 创建了问题 3月28日

悬赏问题

  • ¥15 io.jsonwebtoken.security.Keys
  • ¥15 急,ubuntu安装后no caching mode page found等
  • ¥15 联想交换机NE2580O/NE1064TO安装SONIC
  • ¥15 防火墙的混合模式配置
  • ¥15 Ubuntu不小心注销了要怎么恢复啊
  • ¥15 win10电脑安装完plcsim advanced4.0运行时为什么会提示找不到虚拟网卡
  • ¥15 安装powerbuilder10卡在安装程序正在运行这个页面 没有下一步任何指令
  • ¥15 关于mpi的问题:请问遇到这种情况需要怎么解决,出现这个问题后电脑不能进行mpi多核运行只能进行单核运行
  • ¥50 微信聊天记录备份到电脑提示成功了,但还是没同步到电脑微信
  • ¥15 python怎么在已有视频文件后添加新帧