http://codeforces.com/contest/263/problem/D
题目大意:给一张图,找一条长度大于k+1的环。
题目思路:
任选一点进行dfs,同时记录时间戳,如果构成了环,那么就判断在这个环的长度也就是时间戳之差是否满足长度为k+1的链,因为一个点最少有k个点所以一定能找到。
#include<bits/stdc++.h>
#define ll long long
using namespace std;
int n,k,m;
const int MAXN=1e5+5;
vector <int>v[MAXN];
int num[MAXN],mun[MAXN],cnt=0,st,ed,f;
void dfs(int x)
{
if(f)return ;
num[x]=++cnt;
mun[cnt]=x;
int sz=v[x].size();
for(int i=0;i<sz;i++){
int to=v[x][i];
if(num[to]){
if(num[x]-num[to]+1>=k+1){
st=to,ed=x;f=1;
return ;
}
}
else{
dfs(to);
}
}
}
int main()
{
cin>>n>>m>>k;
for(int i=1;i<=m;i++){
int a,b;
cin>>a>>b;
v[a].push_back(b);
v[b].push_back(a);
}
dfs(1);
cout<<num[ed]-num[st]+1<<endl;
for(int i=num[st];i<=num[ed];i++){
cout<<mun[i]<<" ";
}
cout<<endl;
}