# include <stdio.h>
# include <bits/stdc++.h>
#define _USE_MATH_DEFINES_
#define ll long long
#define ld long double
#define Accepted 0
#define pb push_back
#define mp make_pair
#define sz(x) (int)(x.size())
#define every(x) x.begin(),x.end()
#define F first
#define S second
#define For(i,x,y) for (ll i = x; i <= y; i ++)
#define FOr(i,x,y) for (ll i = x; i >= y; i --)
#define SpeedForce ios_base::sync_with_stdio(0), cin.tie(0)
// ROAD to... Red
using namespace std;
inline bool isvowel (char c) {
c = tolower(c);
if (c == 'a' || c == 'e' || c == 'i' || c == 'y' || c == 'o' || c == 'u') return 1;
return 0;
}
const double eps = 0.000001;
const ld pi = acos(-1);
const int maxn = 1e7 + 9;
const int mod = 1e9 + 7;
const ll MOD = 1e18 + 9;
const ll INF = 1e18 + 123;
const int inf = 2e9 + 11;
const int mxn = 1e6 + 9;
const int N = 5123;
const int M = 22;
const int pri = 997;
const int Magic = 2101;
const int dx[] = {-1, 0, 1, 0};
const int dy[] = {0, -1, 0, 1};
int n, m, k;
vector < int > g[N];
int x[N], y[N];
int has[5005][5005];
int u[N], pr[N][20];
int lca (int a, int b) {
if (u[a] < u[b]) swap(a, b);
for (int i = 18; i >= 0; i --) {
if (u[pr[a][i]] >= u[b]) a = pr[a][i];
}
for (int i = 18; i >= 0;i --) {
if (pr[a][i] != pr[b][i]) {
a = pr[a][i];
b = pr[b][i];
}
}
return pr[a][0];
}
int main () {
cin >> n >> m ;
For (i, 1, m) {
cin >> x[i] >> y[i];
g[x[i]].pb(y[i]);
g[y[i]].pb(x[i]);
has[x[i]][y[i]] = has[y[i]][x[i]] = 1;
}
For (i, 1, m) {
for (auto l : g[x[i]]) {
if (l == y[i]) continue;
for (auto r : g[y[i]]) {
if (r == x[i]) continue;
if (!has[l][y[i]] && !has[r][x[i]] && has[l][r]) {
cout << l << ' ' << x[i] << ' ' << y[i] << ' ' << r;
exit(0);
}
}
}
}
for (int i = 1; i <= n; i ++) {
random_shuffle(every(g[i])), u[i] = 0;
for (int it = 0; it <= 18; it ++)
pr[i][it] = 0;
}
queue < int > q;
u[1] = 1;
q.push(1);
while (q.size()) {
int v = q.front();
q.pop();
for (auto to : g[v]) {
if (u[to] && pr[v][0] != to) {
int x = lca(to, v);
if (u[v] + u[to] - 2 * u[x] >= 3) {
vector < int > st;
while (v != x) {
st.pb(v);
v = pr[v][0];
}
st.pb(x);
reverse(every(st));
while (to != x) {
st.pb(to);
to = pr[to][0];
}
for (auto it : st)
cout << it << ' ';
exit(0);
}
}
if (!u[to]) {
u[to] = u[v] + 1;
pr[to][0] = v;
for (int i = 1; i <= 18; i ++)
pr[to][i] = pr[pr[to][i - 1]][i - 1];
q.push(to);
}
}
}
cout << "no";
return Accepted;
}
// Coded By OB
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
504 KB |
Output is correct |
2 |
Correct |
2 ms |
504 KB |
Output is correct |
3 |
Correct |
3 ms |
704 KB |
Output is correct |
4 |
Correct |
2 ms |
704 KB |
Output is correct |
5 |
Correct |
2 ms |
704 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
704 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
704 KB |
Output is correct |
2 |
Incorrect |
2 ms |
708 KB |
Wrong answer on graph without induced cycle |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
3 ms |
1104 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
5 ms |
1104 KB |
Wrong adjacency |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
9 ms |
2284 KB |
Wrong answer on graph without induced cycle |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
20 ms |
2284 KB |
Wrong adjacency |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Runtime error |
32 ms |
13804 KB |
Execution killed with signal 11 (could be triggered by violating memory limits) |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Runtime error |
36 ms |
14300 KB |
Execution killed with signal 11 (could be triggered by violating memory limits) |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Runtime error |
19 ms |
14300 KB |
Execution killed with signal 11 (could be triggered by violating memory limits) |
2 |
Halted |
0 ms |
0 KB |
- |