#include <bits/stdc++.h>
#define ll long long
#define ull unsigned long long
#define dl double
#define st first
#define nd second
#define II pair <int, int>
using namespace std;
const int N = 1 + 1e3;
const int inf = 7 + 1e9;
struct Edge {
int u, v;
};
int node = 0, ncc = 0;
vector <Edge> e;
vector <int> num, low, a;
vector <vector <int>> adj;
stack <int> q;
void dfs(int u, int p) {
num[u] = low[u] = ++ node;
q.push(u);
for (int i : adj[u]) {
int v = e[i].u + e[i].v - u;
if (v == p)
continue;
if (!num[v]) {
dfs(v, u);
low[u] = min(low[u], low[v]);
}
else
low[u] = min(low[u], num[v]);
}
if (num[u] == low[u]) {
int v = 0;
ncc ++;
while (v != u) {
v = q.top(); q.pop();
a[v] = ncc;
}
}
}
int main() {
ios_base :: sync_with_stdio (0);
cin.tie (0);
int n, m;
cin >> n >> m;
e.resize(m + 1);
adj.resize(n + 1);
for (int i = 1; i <= m; i ++) {
cin >> e[i].u >> e[i].v;
adj[e[i].u].push_back(i);
adj[e[i].v].push_back(i);
}
num.assign(n + 1, 0);
low.assign(n + 1, 0);
a.assign(n + 1, 0);
for (int i = 1; i <= n; i ++)
if (!num[i])
dfs(i, 0);
vector <vector <int>> f(n + 1, vector <int> (n + 1, 0));
for (int i = 1; i <= m; i ++) {
int u = e[i].u, v = e[i].v;
if (a[u] == a[v])
f[u][v] = f[v][u] = 1;
}
queue <int> q;
for (int id = 1; id <= m; id ++) {
int s = e[id].u, t = e[id].v;
if (a[s] != a[t])
continue;
vector <int> ok(n + 1, 0), tr(n + 1, -1);
for (int u = 1; u <= n; u ++)
if (a[u] == a[s] && !(f[s][u] & f[t][u]))
ok[u] = 1;
ok[t] = 1;
q.push(s);
tr[s] = 0;
while (!q.empty()) {
int u = q.front(); q.pop();
for (int i : adj[u]) {
int v = e[i].u + e[i].v - u;
if (u == s && v == t)
continue;
if (!ok[v] || tr[v] >= 0)
continue;
q.push(v);
tr[v] = u;
}
}
if (tr[t] >= 0) {
int u = t;
while (u != 0) {
cout << u << ' ';
u = tr[u];
}
return 0;
}
}
cout << "no";
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |