답안 #393135

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
393135 2021-04-22T19:41:24 Z dolphingarlic Potemkin cycle (CEOI15_indcyc) C++14
30 / 100
339 ms 89852 KB
/*
CEOI 2016 Potemkin Cycle
- Let each edge (u, v) represent a node (uv) in graph H
- There is an edge between (uv) and (vw) in H iff (uw) doesn't exist
    - This means that there are no cycles of length 3 in H
    - We can construct H in O(NR) time
- An answer exists iff a cycle exists in H; run DFS to find a cycle
*/

#include <bits/stdc++.h>
typedef long long ll;
using namespace std;

int u[100001], v[100001], adj[1001][1001];
vector<int> graph[100001];
int prv[100001];

void dfs(int node, int parent = -1) {
    prv[node] = parent;
    for (int i : graph[node]) if (i != parent) {
        if (prv[i]) {
            vector<int> edges;
            int curr = node;
            while (curr != prv[i]) {
                edges.push_back(curr);
                curr = prv[curr];
            }
            int m = edges.size();
            for (int j = 0; j < m; j++) {
                if (u[edges[j]] != u[edges[(j + 1) % m]] &&
                    u[edges[j]] != v[edges[(j + 1) % m]])
                    cout << u[edges[j]] << ' ';
                else
                    cout << v[edges[j]] << ' ';
            }
            exit(0);
        } else dfs(i, node);
    }
}

int main() {
    cin.tie(0)->sync_with_stdio(0);
    int n, r;
    cin >> n >> r;
    for (int i = 1; i <= r; i++) {
        cin >> u[i] >> v[i];
        adj[u[i]][v[i]] = adj[v[i]][u[i]] = i;
    }

    for (int i = 1; i <= r; i++) {
        for (int j = 1; j <= n; j++) if (j != u[i] && j != v[i]) {
            if (adj[u[i]][j] && !adj[v[i]][j])
                graph[i].push_back(adj[u[i]][j]);
            if (!adj[u[i]][j] && adj[v[i]][j])
                graph[i].push_back(adj[v[i]][j]);
        }
    }

    for (int i = 1; i <= r; i++) if (!prv[i]) dfs(i);
    cout << "no";
    return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 2640 KB Output is correct
2 Correct 2 ms 2636 KB Output is correct
3 Correct 2 ms 2636 KB Output is correct
4 Correct 2 ms 2636 KB Output is correct
5 Correct 2 ms 2636 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 2636 KB Too short sequence
# 결과 실행 시간 메모리 Grader output
1 Incorrect 3 ms 2636 KB Repeated vertex
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 3020 KB Too short sequence
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 3276 KB Too short sequence
2 Incorrect 4 ms 3328 KB Wrong answer on graph without induced cycle
# 결과 실행 시간 메모리 Grader output
1 Incorrect 7 ms 4104 KB Wrong answer on graph without induced cycle
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 9 ms 5324 KB Too short sequence
2 Incorrect 9 ms 5440 KB Wrong answer on graph without induced cycle
# 결과 실행 시간 메모리 Grader output
1 Incorrect 205 ms 21548 KB Repeated vertex
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 125 ms 51268 KB Too short sequence
2 Incorrect 129 ms 55128 KB Wrong answer on graph without induced cycle
# 결과 실행 시간 메모리 Grader output
1 Correct 109 ms 6224 KB Too short sequence
2 Correct 102 ms 6212 KB Output is correct
3 Incorrect 339 ms 89852 KB Wrong adjacency
4 Halted 0 ms 0 KB -