标签:span dfs continue nbsp name img close src 输入格式
题目链接:http://lx.lanqiao.cn/problem.page?gpid=T453
问题描述
#include<bits/stdc++.h> using namespace std; typedef long long ll; const int maxn=100005; int n,tot,head[maxn],in[maxn]; vector<int> ans; struct node{ int to,next; }edge[2*maxn]; void add(int u,int v){ edge[tot].to=v; edge[tot].next=head[u]; head[u]=tot++; } void topsort(){ queue<int> que; for(int i=1;i<=n;i++){ if(in[i]==1)que.push(i); } while(que.size()){ int now=que.front(); que.pop(); for(int i=head[now];i!=-1;i=edge[i].next){ int v=edge[i].to; in[v]--; if(in[v]==1)que.push(v); } } for(int i=1;i<=n;i++){ if(in[i]==2)ans.push_back(i); } } int main(){ cin>>n; for(int i=0;i<=n;i++)head[i]=-1; for(int i=0;i<n;i++){ int u,v; cin>>u>>v; add(u,v); add(v,u); in[u]++; in[v]++; } topsort(); sort(ans.begin(),ans.end()); for(int i=0;i<ans.size();i++) { printf("%d",ans[i]); if(i!=ans.size()-1)cout<<" "; else cout<<endl; } return 0; }
第二种解法:
#include<bits/stdc++.h> using namespace std; typedef long long ll; const int maxn=100005; int n,tot,st,ed,head[maxn],par[maxn],pre[maxn],vis[maxn]; vector<int> ans; struct node{ int to,next; }edge[2*maxn]; void add(int u,int v){ edge[tot].to=v; edge[tot].next=head[u]; head[u]=tot++; } int find(int x){ if(x==par[x])return x; else return par[x]=find(par[x]); } void unite(int x,int y){ int fx=find(x),fy=find(y); par[fx]=fy; } void dfs(int x){ vis[x]=1; for(int i=head[x];i!=-1;i=edge[i].next){ int v=edge[i].to; if(!vis[v]){ if(x==st&&v==ed)continue; vis[v]=1; pre[v]=x; if(v==ed)return; dfs(v); } } } int main(){ cin>>n; for(int i=0;i<=n;i++){ head[i]=-1; par[i]=i; } for(int i=0;i<n;i++){ int u,v; cin>>u>>v; add(u,v); add(v,u); if(find(u)!=find(v))unite(u,v); else{ st=u; ed=v; } } pre[st]=st; dfs(st); int tmp=ed; ans.push_back(ed); while(pre[tmp]!=tmp){ tmp=pre[tmp]; ans.push_back(tmp); } sort(ans.begin(),ans.end()); for(int i=0;i<ans.size();i++) { printf("%d",ans[i]); if(i!=ans.size()-1)cout<<" "; else cout<<endl; } return 0; }
标签:span dfs continue nbsp name img close src 输入格式
原文地址:https://www.cnblogs.com/zjl192628928/p/10455496.html