Submission #393153

# Submission time Handle Problem Language Result Execution time Memory
393153 2021-04-22T20:16:21 Z dolphingarlic Potemkin cycle (CEOI15_indcyc) C++14
90 / 100
664 ms 93116 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[200001], v[200001], adj[1001][1001];
vector<int> graph[200001], stck;
bool visited[200001], active[200001];

void dfs(int node, int parent = -1) {
    if (active[node]) {
        while (stck.back() != node) {
            cout << v[stck.back()] << ' ';
            stck.pop_back();
        }
        cout << v[node];
        exit(0);
    }
    if (visited[node]) return;

    stck.push_back(node);
    visited[node] = active[node] = true;
    for (int i : graph[node]) if (i != parent) dfs(i, node);
    stck.pop_back();
    active[node] = false;
}

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];
        u[i + r] = v[i], v[i + r] = u[i];
        adj[u[i]][v[i]] = i, adj[v[i]][u[i]] = i + r;
    }

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

    for (int i = 1; i <= 2 * r; i++) if (!visited[i]) dfs(i, i);
    cout << "no";
    return 0;
}
# Verdict Execution time Memory Grader output
1 Correct 3 ms 4940 KB Output is correct
2 Correct 3 ms 4940 KB Output is correct
3 Correct 3 ms 4940 KB Output is correct
4 Correct 3 ms 4940 KB Output is correct
5 Correct 3 ms 4940 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 4 ms 5068 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 3 ms 5068 KB Output is correct
2 Correct 3 ms 5068 KB Output is correct
# Verdict Execution time Memory Grader output
1 Incorrect 4 ms 5440 KB Wrong adjacency
# Verdict Execution time Memory Grader output
1 Correct 5 ms 5580 KB Output is correct
2 Correct 5 ms 5708 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 11 ms 6476 KB Output is correct
2 Correct 10 ms 6476 KB Output is correct
3 Correct 21 ms 8352 KB Output is correct
4 Correct 25 ms 8388 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 13 ms 7656 KB Output is correct
2 Correct 14 ms 7804 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 390 ms 24636 KB Output is correct
2 Correct 112 ms 12356 KB Output is correct
3 Correct 371 ms 25056 KB Output is correct
4 Correct 122 ms 12484 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 175 ms 53568 KB Output is correct
2 Correct 224 ms 57644 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 199 ms 8740 KB Output is correct
2 Correct 174 ms 8580 KB Output is correct
3 Correct 589 ms 92324 KB Output is correct
4 Correct 664 ms 93116 KB Output is correct