一道有关环的问题
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5+10;
vector<int> G[N];
int n, u, v, x, vis[N];
bool t, f;
set<int> st;
void dfs(int p) {
vis[p] = 1;
for(auto i: G[p]) {
if(vis[i] == 1) {
t = 1;
return;
} else if(vis[i] == 0) {
dfs(i);
}
}
vis[p] = 2;
}
bool Cycle() {
for(int i = 1; i <= n; i++) {
if(vis[i] == 0) {
dfs(i);
if(t) {
x = i;
return true;
}
}
}
return false;
}
void find(int beg, int p) {
if(p == beg && f) {
for(auto i = st.begin(); i != st.end(); i++)
printf("%d ", (*i));
return;
}
f = 1;
for(auto i: G[p]) {
st.insert(i);
find(beg, i);
st.erase(i);
}
}
int main() {
scanf("%d", &n);
for(int i = 1; i <= n; i++) {
scanf("%d%d", &u, &v);
G[u].push_back(v);
}
Cycle();
find(x, 1);
return 0;
}