思路:这道题打的标签似乎是并查集加DFS,不过我的并查集思路可能有点问题,有空再仔细想一下,可以看下下面这个博客
http://t.csdnimg.cn/LSVct
我看了另一个网友的题解,思路是用度来把叶子结点一个个剪掉,最后会剩下一个环,代码如下:
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int g[N];
vector<int>a[N];
int main(){
int n;
cin>>n;
int u,v;
for(int i=0;i<n;i++){
cin>>u>>v;
g[u]++;
g[v]++;
a[u].push_back(v);
a[v].push_back(u);//双向边
}
queue<int>q;//存叶子结点
for(int i=1;i<=n;i++){
if(g[i]==1)q.push(i);
}
while(!q.empty()){
int u=q.front();
q.pop();
for(int i=0;i<a[u].size();i++){
g[a[u][i]]--;
if(g[a[u][i]]==1)q.push(a[u][i]);
}
}
for(int i=1;i<=n;i++){
if(g[i]>1)cout<<i<<" ";
}
return 0;
}