# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1258084 | mquang | Potemkin cycle (CEOI15_indcyc) | C++20 | 0 ms | 0 KiB |
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define TIME (1.0 * clock() / CLOCKS_PER_SEC)
const int INF = 1e18, N = 1e3 + 5, MOD = 1e9 + 7;
vector<int> g[N];
bool chk[N][N], vis[N];
int dist[N], par[N], qu[N], cnt;
void dfs(int u, int p){
if (u == p || vis[u]) return;
vis[u] = true;
if(chk[u][p]){
qu[cnt++] = u;
return;
}
for(int v : g[u]) dfs(v, p);
}
int32_t main(){
ios_base::sync_with_stdio(0); cin.tie(nullptr); cout.tie(nullptr);
int n, m;
cin >> n >> m;
while(m--){
int u, v;
cin >> u >> v;
u--, v--;
g[u].push_back(v);
g[v].push_back(u);
chk[u][v] = chk[v][u] = true;
}
for(int i = 0; i < n; i++){
for(int i1 = 0; i1 < n; i1++) vis[i1] = false;
vis[i] = true;
for(int i1 = 0; i1 < n; i1++)
if(!chk[i1][i] && !vis[i1]){
cnt = 0, dfs(i1, i);
for(int z = 0; z < cnt; z++){
int s = qu[z];
for(int h = z + 1; h < cnt; h++){
int t = qu[h];
if(!chk[s][t]){
for(int i2 = 0; i2 < n; i2++) dist[i2] = n;
int cnt = 0;
dist[s] = 0;
par[s] = -1;
qu[cnt++] = s;
for(int h = 0; h < cnt; h++){
int u = qu[h], d = dist[i1] + 1;
for(int v : g[u]){
if(v != i && (v == t || !chk[v][i]) && dist[v] == n){
dist[v] = d;
par[v] = u;
qu[cnt++] = v;
}
}
}
cout << s + 1 << ' ' << i + 1;
for(int i2 = t; i2 != s; i2 = par[i2]) cout << ' ' << i2 + 1;
cout << '\n';
return 0;
}
}
}
}
}
cout << "no";
cerr << "Time: " << TIME;
return 0;
}#include <bits/stdc++.h>
using namespace std;
#define int long long
#define TIME (1.0 * clock() / CLOCKS_PER_SEC)
const int INF = 1e18, N = 1e3 + 5, MOD = 1e9 + 7;
vector<int> g[N];
bool chk[N][N], vis[N];
int dist[N], par[N], qu[N], cnt;
void dfs(int u, int p){
if (u == p || vis[u]) return;
vis[u] = true;
if(chk[u][p]){
qu[cnt++] = u;
return;
}
for(int v : g[u]) dfs(v, p);
}
int32_t main(){
ios_base::sync_with_stdio(0); cin.tie(nullptr); cout.tie(nullptr);
int n, m;
cin >> n >> m;
while(m--){
int u, v;
cin >> u >> v;
u--, v--;
g[u].push_back(v);
g[v].push_back(u);
chk[u][v] = chk[v][u] = true;
}
for(int i = 0; i < n; i++){
for(int i1 = 0; i1 < n; i1++) vis[i1] = false;
vis[i] = true;
for(int i1 = 0; i1 < n; i1++)
if(!chk[i1][i] && !vis[i1]){
cnt = 0, dfs(i1, i);
for(int z = 0; z < cnt; z++){
int s = qu[z];
for(int h = z + 1; h < cnt; h++){
int t = qu[h];
if(!chk[s][t]){
for(int i2 = 0; i2 < n; i2++) dist[i2] = n;
int cnt = 0;
dist[s] = 0;
par[s] = -1;
qu[cnt++] = s;
for(int h = 0; h < cnt; h++){
int u = qu[h], d = dist[i1] + 1;
for(int v : g[u]){
if(v != i && (v == t || !chk[v][i]) && dist[v] == n){
dist[v] = d;
par[v] = u;
qu[cnt++] = v;
}
}
}
cout << s + 1 << ' ' << i + 1;
for(int i2 = t; i2 != s; i2 = par[i2]) cout << ' ' << i2 + 1;
cout << '\n';
return 0;
}
}
}
}
}
cout << "no";
cerr << "Time: " << TIME;
return 0;
}