tarjan一个答案输出两遍的问题如何解决?
查看原帖
tarjan一个答案输出两遍的问题如何解决?
1053722
yu_rui楼主2025/2/6 19:23

代码:

#include<bits/stdc++.h>
using namespace std;
int fa[500001],vis[500001];
vector<int>e[500001],q[500001];
int find(int x){
    return fa[x]==x?x:find(fa[x]);
}
void dfs(int x){
    vis[x]=1;
    for(int i=0;i<e[x].size();++i){
        if(!vis[e[x][i]]){ dfs(e[x][i]); fa[e[x][i]]=x; }
    }
    for(int i=0;i<q[x].size();++i){
        if(vis[q[x][i]]){ cout<<find(q[x][i])<<"\n"; 
    }
}
int main(){
    int n,m,s,x,y;
    cin>>n>>m>>s;
    for(int i=1;i<n;++i){
        cin>>x>>y;
        e[x].push_back(y);
        e[y].push_back(x);
    }
    for(int i=1;i<=m;++i){
        cin>>x>>y;
        q[x].push_back(y);
        q[y].push_back(x);
    }
    for(int i=1;i<=n;++i) fa[i]=i;
    dfs(s);
    return 0;
}
2025/2/6 19:23
加载中...