| # | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
|---|---|---|---|---|---|---|---|
| 24672 | Bruteforceman | Potemkin cycle (CEOI15_indcyc) | C++11 | 1000 ms | 8328 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#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;
}
컴파일 시 표준 에러 (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... | ||||
