답안 #1069292

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1069292 2024-08-21T18:51:36 Z vjudge1 Potemkin cycle (CEOI15_indcyc) C++17
70 / 100
1000 ms 6664 KB
#include <bits/stdc++.h>
using namespace std;

#define ff  first
#define ss  second
#define pb  push_back

const int N = 1005;
const int mod = 1e6 + 7;
const int oo = 2e9;

typedef long long  ll;
typedef pair<int,int>  pii;

vector <int> g[N];
vector <int> ng[N];
int cnt;
int visi[N];

void dfs (int u) {
    visi[u] = cnt;
    for (auto &v : ng[u]) {
        if (!visi[v]) dfs(v);
    }
}

int main() {
    #ifdef LOCAL
    freopen("input.txt","r",stdin);
    #endif // LOCAL

    ios_base::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);

    int n, m; cin >> n >> m;

    vector <pii> edges;
    vector <vector<int>> dir(n, vector<int>(n, 0));

    for (int i = 0; i < m; ++i) {
        int u, v; cin >> u >> v;
        u--;v--;
        dir[u][v] = dir[v][u] = 1;
        g[u].pb(v);
        g[v].pb(u);
        edges.pb({u, v});
    }

    for (int j = 0; j < n; ++j) {
        vector <int> npss(n, 0);
        npss[j] = 1;
        for (auto &v : g[j]) npss[v] = 1;

        for (int i = 0; i < n; ++i) ng[i].clear(), visi[i] = 0;

        for (auto &e : edges) {
            if (npss[e.ff] || npss[e.ss]) continue;
            ng[e.ff].pb(e.ss);
            ng[e.ss].pb(e.ff);
        }

        cnt = 1;
        for (int i = 0; i < n; ++i) {
            if (npss[i] == 0 && !visi[i]) {
                dfs(i);
                cnt++;
            }
        }

        vector <vector<int>> incomp(n);

        for (auto &v : g[j]) {
            for (auto &v2 : g[v]) {
                if (npss[v2] == 0) {
                    for (auto &h : incomp[visi[v2]]) {
                        if (!dir[h][v]) {
                            pii e = {v, j};
                            vector <int> npss2 (n, 0);
                            vector <int> di (n, oo);
                            vector <int> fat (n, -1);

                            npss2[e.ss] = 1;
                            for (auto &v : g[e.ss]) {
                                npss2[v] = 1;
                            }

                            queue <int> q;
                            q.push(e.ff);
                            di[e.ff] = 0;

                            while (q.size()) {
                                int u = q.front(); q.pop();
                                for (auto &v : g[u]) {
                                    if (di[v] == oo) {
                                        di[v] = di[u] + 1;
                                        fat[v] = u;
                                        if (npss2[v] == 0) q.push(v);
                                    }
                                }
                            }

                            //cout << e.ff << " " << e.ss << "\n";

                            for (int i = 0; i < n; ++i) {
                                //cout << i << " " << npss[i] << " " << di[i] << '\n';
                                if (i != e.ff && npss2[i] && di[i] < oo && di[i] > 1) {
                                    cout << e.ss + 1 << " ";
                                    int cur = i;
                                    while (cur != -1) {
                                        cout << cur + 1 << " ";
                                        cur = fat[cur];
                                    }
                                    cout << '\n';
                                    return 0;
                                }
                            }
                            assert(di[h] < oo);
                        }
                    }
                }
            }
            for (auto &v2 : g[v]) {
                if (npss[v2] == 0) {
                    incomp[visi[v2]].pb(v);
                }
            }
        }
    }
    cout << "no\n";

}
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 0 ms 348 KB Output is correct
5 Correct 0 ms 500 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 348 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 344 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 348 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 348 KB Output is correct
2 Correct 9 ms 604 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 8 ms 1112 KB Output is correct
2 Correct 1 ms 860 KB Output is correct
3 Correct 6 ms 860 KB Output is correct
4 Correct 183 ms 1144 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 7 ms 860 KB Output is correct
2 Correct 97 ms 860 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 24 ms 5840 KB Output is correct
2 Correct 7 ms 5348 KB Output is correct
3 Execution timed out 1055 ms 6100 KB Time limit exceeded
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 295 ms 5144 KB Output is correct
2 Execution timed out 1071 ms 5328 KB Time limit exceeded
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 32 ms 3024 KB Output is correct
2 Correct 216 ms 3024 KB Output is correct
3 Execution timed out 1060 ms 6664 KB Time limit exceeded
4 Halted 0 ms 0 KB -