| # | Time | Username | Problem | Language | Result | Execution time | Memory | 
|---|---|---|---|---|---|---|---|
| 24672 | Bruteforceman | Potemkin cycle (CEOI15_indcyc) | C++11 | 1000 ms | 8328 KiB | 
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "bits/stdc++.h"
using namespace std;
int n, m;
vector <int> g[1005];
bool vis[1005];
int par[1005];
vector <int> l, r;
bool del[100010];
bool bad[100010];
int mat[1005][1005];
vector <int> path (int c, int b) { 
	for(int i = 0; i < m; i++) {
		if(bad[l[i]] && bad[r[i]]) continue;
		if(l[i] == c || r[i] == c || l[i] == b || r[i] == b) {
			del[i] = false;
		} 
	}
	memset(vis, false, sizeof vis);
	memset(par, false, sizeof par);
	queue <int> q;
	q.push(b);
	vis[b] = true;
	par[b] = -1;
	while(not q.empty()) {
		int x = q.front();
		q.pop();
		for(int i : g[x]) {
			int y = l[i] ^ r[i] ^ x;
			if(vis[y] == false && del[i] == false) {
				par[y] = x;
				vis[y] = true;
				q.push(y);
			}
		}
	} 
	vector <int> ans;
	int cur = c;
	while(cur != -1) {
		ans.push_back(cur);
		cur = par[cur];
	}
	return ans;
}
vector <int> bad_nodes;
void dfs(int x) {
	vis[x] = true;
	for(auto i : g[x]) {
		int y = l[i] ^ r[i] ^ x;
		if(bad[y] == true) {
			bad_nodes.push_back(y);
		}
		if(vis[y] == false && del[i] == false) {
			dfs(y);
		} 
	}
}
void check(int root) {
	memset(vis, false, sizeof vis);
	memset(del, false, sizeof del);
	memset(bad, false, sizeof bad);
	bad[root] = true;
	for(auto i : g[root]) {
		bad[l[i] ^ r[i] ^ root] = true;
	}
	for(int i = 0; i < m; i++) {
		if(bad[l[i]] || bad[r[i]]) {
			del[i] = true;
		}
	}
	for(int i = 1; i <= n; i++) {
		if(vis[i] == false && bad[i] == false) {
			bad_nodes.clear();
			dfs(i);
			
			bool good = false;
			int p = -1;
			int q = -1;
			for(auto j : bad_nodes) {
				for(auto k : bad_nodes) {
					if(mat[j][k] == 0 && k != j) {
						p = j;
						q = k;
						good = true;
						goto here;
					}
				}
			}
			here:
			if(good) {
				vector <int> ans = path(p, q);
				for(auto j : ans) {
					printf("%d ", j);
				}
				printf("%d\n", root);
				exit(0);
			}
		}
	}
}
int main(int argc, char const *argv[])
{
	scanf("%d %d", &n, &m);
	for(int i = 0; i < m; i++) {
		int p, q;
		scanf("%d %d", &p, &q);
		g[p].push_back(i);
		g[q].push_back(i);
		l.push_back(p);
		r.push_back(q);
		mat[p][q] = mat[q][p] = 1;
	} 
	for(int i = 1; i <= n; i++) {
		check(i);
	}
	printf("no\n");
	return 0;
}
Compilation message (stderr)
| # | 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... | ||||
