답안 #589390

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
589390 2022-07-04T14:33:49 Z TheScrasse 낙하산 고리들 (IOI12_rings) C++17
52 / 100
1370 ms 262144 KB
#include <bits/stdc++.h>
using namespace std;

#define nl "\n"
#define nf endl
#define ll int
#define pb push_back
#define _ << ' ' <<

#define INF (ll)1e9
#define mod 998244353
#define maxn 1000010

ll i, i1, j, k, k1, t, n, m, res, flag[10], a, b;
ll ms[5], status;
vector<array<ll, 2>> el;

struct graph {
    ll cn3, cyc, pr[maxn], sz[maxn];
    vector<ll> adj[maxn];

    graph() {
        ll i;
        for (i = 1; i <= n; i++) {
            pr[i] = i; sz[i] = 1;
        }
        cn3 = 0; cyc = 0;
    }

    ll find(ll x) {
        if (x == pr[x]) return x;
        return pr[x] = find(pr[x]);
    }

    bool same(ll a, ll b) {
        return (find(a) == find(b));
    }

    void onion(ll a, ll b) {
        a = find(a); b = find(b);
        if (a == b) {
            cyc++; res = sz[a]; return;
        }
        if (sz[a] < sz[b]) swap(a, b);
        pr[b] = a; sz[a] += sz[b];
    }

    ll dg(ll p) {
        return adj[p].size();
    }

    void upd(ll p, ll x) {
        cn3 -= (dg(p) >= 3);
        cn3 += (dg(p) + x >= 3);
    }
};

vector<graph> gr;

void ins(ll p, ll a, ll b) {
    if (ms[p] == a || ms[p] == b) return;
    gr[p].upd(a, 1); gr[p].upd(b, 1);
    gr[p].adj[a].pb(b); gr[p].adj[b].pb(a);
    gr[p].onion(a, b);
}

void Init(int N_) {
    n = N_;
    gr.resize(5);
    // gr[0] = graph(); gr[1] = graph(); gr[2] = graph(); gr[3] = graph(); gr[4] = graph();
}

void Link(int A, int B) {
    a = A + 1; b = B + 1;
    el.pb({a, b});
    if (status == 0) ins(0, a, b);
    else if (status == 2) ins(1, a, b);
    else for (i = 0; i <= 4; i++) ins(i, a, b);

    if (status == 0) {
        if (gr[0].dg(b) >= 3) swap(a, b);
        if (gr[0].dg(a) >= 3) {
            status = 1;
            ms[1] = a; ms[2] = gr[0].adj[a][0]; ms[3] = gr[0].adj[a][1]; ms[4] = gr[0].adj[a][2];
            gr.resize(1);
            gr.resize(5);
            // gr[1] = graph(); gr[2] = graph(); gr[3] = graph(); gr[4] = graph();
            for (auto [x, y] : el) {
                for (i = 1; i <= 4; i++) ins(i, x, y);
            }
            el.clear();
        }
    }

    if (gr[0].dg(a) == 4 || gr[0].dg(b) == 4) status = 2;
}

int CountCritical() {
    // cout << "status =" _ status _ gr[0].cyc << nl;

    if (status == 0) {
        if (gr[0].cyc == 0) return n;
        if (gr[0].cyc == 1) return res;
        return 0;
    }

    res = 0;
    for (i = 1; i <= 4; i++) {
        if (gr[i].cyc + gr[i].cn3 == 0) res++;
    }
    return res;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 52 ms 117808 KB Output is correct
2 Correct 73 ms 118548 KB Output is correct
3 Correct 75 ms 118424 KB Output is correct
4 Correct 54 ms 117796 KB Output is correct
5 Correct 54 ms 118052 KB Output is correct
6 Correct 55 ms 118192 KB Output is correct
7 Correct 71 ms 118140 KB Output is correct
8 Correct 54 ms 118012 KB Output is correct
9 Correct 86 ms 118784 KB Output is correct
10 Correct 82 ms 118836 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 361 ms 158528 KB Output is correct
2 Correct 1370 ms 242692 KB Output is correct
3 Correct 910 ms 194468 KB Output is correct
4 Correct 906 ms 195824 KB Output is correct
5 Correct 881 ms 195864 KB Output is correct
6 Correct 906 ms 194592 KB Output is correct
7 Correct 900 ms 195772 KB Output is correct
8 Runtime error 1056 ms 262144 KB Execution killed with signal 9
9 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 52 ms 117808 KB Output is correct
2 Correct 73 ms 118548 KB Output is correct
3 Correct 75 ms 118424 KB Output is correct
4 Correct 54 ms 117796 KB Output is correct
5 Correct 54 ms 118052 KB Output is correct
6 Correct 55 ms 118192 KB Output is correct
7 Correct 71 ms 118140 KB Output is correct
8 Correct 54 ms 118012 KB Output is correct
9 Correct 86 ms 118784 KB Output is correct
10 Correct 82 ms 118836 KB Output is correct
11 Correct 77 ms 118796 KB Output is correct
12 Correct 82 ms 119756 KB Output is correct
13 Correct 91 ms 119660 KB Output is correct
14 Correct 76 ms 118388 KB Output is correct
15 Correct 75 ms 118696 KB Output is correct
16 Correct 59 ms 118596 KB Output is correct
17 Correct 81 ms 119816 KB Output is correct
18 Correct 82 ms 119520 KB Output is correct
19 Correct 63 ms 118672 KB Output is correct
20 Correct 93 ms 119800 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 52 ms 117808 KB Output is correct
2 Correct 73 ms 118548 KB Output is correct
3 Correct 75 ms 118424 KB Output is correct
4 Correct 54 ms 117796 KB Output is correct
5 Correct 54 ms 118052 KB Output is correct
6 Correct 55 ms 118192 KB Output is correct
7 Correct 71 ms 118140 KB Output is correct
8 Correct 54 ms 118012 KB Output is correct
9 Correct 86 ms 118784 KB Output is correct
10 Correct 82 ms 118836 KB Output is correct
11 Correct 77 ms 118796 KB Output is correct
12 Correct 82 ms 119756 KB Output is correct
13 Correct 91 ms 119660 KB Output is correct
14 Correct 76 ms 118388 KB Output is correct
15 Correct 75 ms 118696 KB Output is correct
16 Correct 59 ms 118596 KB Output is correct
17 Correct 81 ms 119816 KB Output is correct
18 Correct 82 ms 119520 KB Output is correct
19 Correct 63 ms 118672 KB Output is correct
20 Correct 93 ms 119800 KB Output is correct
21 Correct 80 ms 120972 KB Output is correct
22 Correct 81 ms 122828 KB Output is correct
23 Correct 83 ms 124172 KB Output is correct
24 Correct 121 ms 123376 KB Output is correct
25 Correct 85 ms 121988 KB Output is correct
26 Correct 111 ms 124300 KB Output is correct
27 Correct 96 ms 124404 KB Output is correct
28 Correct 228 ms 135816 KB Output is correct
29 Correct 123 ms 125044 KB Output is correct
30 Correct 96 ms 125488 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 52 ms 117808 KB Output is correct
2 Correct 73 ms 118548 KB Output is correct
3 Correct 75 ms 118424 KB Output is correct
4 Correct 54 ms 117796 KB Output is correct
5 Correct 54 ms 118052 KB Output is correct
6 Correct 55 ms 118192 KB Output is correct
7 Correct 71 ms 118140 KB Output is correct
8 Correct 54 ms 118012 KB Output is correct
9 Correct 86 ms 118784 KB Output is correct
10 Correct 82 ms 118836 KB Output is correct
11 Correct 361 ms 158528 KB Output is correct
12 Correct 1370 ms 242692 KB Output is correct
13 Correct 910 ms 194468 KB Output is correct
14 Correct 906 ms 195824 KB Output is correct
15 Correct 881 ms 195864 KB Output is correct
16 Correct 906 ms 194592 KB Output is correct
17 Correct 900 ms 195772 KB Output is correct
18 Runtime error 1056 ms 262144 KB Execution killed with signal 9
19 Halted 0 ms 0 KB -