답안 #481693

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
481693 2021-10-21T11:15:31 Z Haruto810198 낙하산 고리들 (IOI12_rings) C++17
52 / 100
1930 ms 262148 KB
#include <bits/stdc++.h>

using namespace std;

//#define int long long
#define double long double

#define FOR(i, l, r, d) for(int i=(l); i<=(r); i+=(d))
#define szof(x) ((int)(x).size())

#define vi vector<int>
#define pii pair<int, int>

#define F first
#define S second

#define pb push_back
#define eb emplace_back
#define mkp make_pair

const int MAX = 1000010;

int n;
vi check_id;

struct Graph{
    vi edge[MAX];
    int deg[MAX];
    int p[MAX], sz[MAX];
    int cyc, cyclen, deg3;
    int AC;

    void init(){
        FOR(i, 0, n-1, 1){
            edge[i].clear();
            deg[i] = 0;
            p[i] = i;
            sz[i] = 1;
        }
        cyc = 0;
        cyclen = 0;
        deg3 = 0;
        AC = 1;
    }

    int findp(int v){
        if(v == p[v]) return v;
        return p[v] = findp(p[v]);
    }

    bool uni(int u, int v){
        int pu = findp(u);
        int pv = findp(v);
        if(pu == pv) return 0;
        if(sz[pu] > sz[pv]){
            p[pv] = pu;
            sz[pu] += sz[pv];
        }
        else{
            p[pu] = pv;
            sz[pv] += sz[pu];
        }
        return 1;
    }

    void add_edge(int u, int v){
        if(u > v) swap(u, v);
        edge[u].pb(v);
        //edge[v].pb(u);
        deg[u]++;
        deg[v]++;
        if(deg[u] == 3) deg3++;
        if(deg[v] == 3) deg3++;
        if(!uni(u, v) and deg3 == 0){
            cyc++;
            cyclen = sz[findp(u)];
        }
    }
};

Graph G_now, G_check[4];

void Init(int N){
    n = N;
    G_now.init();
}

void Link(int u, int v){

    if(G_now.deg3 == 0){
        G_now.add_edge(u, v);

        if(G_now.deg3 > 0){
            if(G_now.deg[u] < G_now.deg[v]) swap(u, v);
            check_id = G_now.edge[u];
            check_id.pb(u);

            FOR(uu, 0, n-1, 1){
                for(int vv : G_now.edge[uu]){
                    if(vv == u) check_id.pb(uu);
                }
            }

            assert(szof(check_id) == 4);

            FOR(i, 0, 3, 1){
                G_check[i].init();
                FOR(uu, 0, n-1, 1){
                    if(uu == check_id[i]) continue;
                    for(int vv : G_now.edge[uu]){
                        if(vv == check_id[i]) continue;
                        G_check[i].add_edge(uu, vv);
                    }
                }
            }

            G_now.init();
            G_now.deg3 = 1;
        }

        return;
    }

    if(G_now.deg3 > 0){
        FOR(i, 0, 3, 1){
            if(u != check_id[i] and v != check_id[i] and G_check[i].AC){
                G_check[i].add_edge(u, v);
            }
        }
    }

}

int CountCritical(){
    if(G_now.deg3 == 0){
        if(G_now.cyc == 0) return n;
        else if(G_now.cyc == 1) return G_now.cyclen;
        else return 0;
    }
    else{
        int ret = 0;
        FOR(i, 0, 3, 1){
            if(G_check[i].cyc == 0 and G_check[i].deg3 == 0) ret++;
            else if(G_check[i].AC == 1){
                G_check[i].init();
                G_check[i].deg3 = 1;
                G_check[i].AC = 0;
            }
        }
        return ret;
    }
}
# 결과 실행 시간 메모리 Grader output
1 Correct 56 ms 117708 KB Output is correct
2 Correct 60 ms 118440 KB Output is correct
3 Correct 62 ms 118576 KB Output is correct
4 Correct 57 ms 117796 KB Output is correct
5 Correct 58 ms 117832 KB Output is correct
6 Correct 59 ms 118000 KB Output is correct
7 Correct 57 ms 118128 KB Output is correct
8 Correct 59 ms 117912 KB Output is correct
9 Correct 59 ms 118596 KB Output is correct
10 Correct 59 ms 118636 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 313 ms 135244 KB Output is correct
2 Correct 1613 ms 239536 KB Output is correct
3 Correct 1930 ms 246560 KB Output is correct
4 Correct 691 ms 150852 KB Output is correct
5 Correct 707 ms 150900 KB Output is correct
6 Correct 696 ms 150196 KB Output is correct
7 Correct 1828 ms 244996 KB Output is correct
8 Runtime error 1367 ms 262148 KB Execution killed with signal 9
9 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 56 ms 117708 KB Output is correct
2 Correct 60 ms 118440 KB Output is correct
3 Correct 62 ms 118576 KB Output is correct
4 Correct 57 ms 117796 KB Output is correct
5 Correct 58 ms 117832 KB Output is correct
6 Correct 59 ms 118000 KB Output is correct
7 Correct 57 ms 118128 KB Output is correct
8 Correct 59 ms 117912 KB Output is correct
9 Correct 59 ms 118596 KB Output is correct
10 Correct 59 ms 118636 KB Output is correct
11 Correct 62 ms 118628 KB Output is correct
12 Correct 62 ms 119468 KB Output is correct
13 Correct 65 ms 119348 KB Output is correct
14 Correct 59 ms 118624 KB Output is correct
15 Correct 58 ms 119156 KB Output is correct
16 Correct 61 ms 118212 KB Output is correct
17 Correct 58 ms 118596 KB Output is correct
18 Correct 60 ms 119152 KB Output is correct
19 Correct 61 ms 118152 KB Output is correct
20 Correct 62 ms 119272 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 56 ms 117708 KB Output is correct
2 Correct 60 ms 118440 KB Output is correct
3 Correct 62 ms 118576 KB Output is correct
4 Correct 57 ms 117796 KB Output is correct
5 Correct 58 ms 117832 KB Output is correct
6 Correct 59 ms 118000 KB Output is correct
7 Correct 57 ms 118128 KB Output is correct
8 Correct 59 ms 117912 KB Output is correct
9 Correct 59 ms 118596 KB Output is correct
10 Correct 59 ms 118636 KB Output is correct
11 Correct 62 ms 118628 KB Output is correct
12 Correct 62 ms 119468 KB Output is correct
13 Correct 65 ms 119348 KB Output is correct
14 Correct 59 ms 118624 KB Output is correct
15 Correct 58 ms 119156 KB Output is correct
16 Correct 61 ms 118212 KB Output is correct
17 Correct 58 ms 118596 KB Output is correct
18 Correct 60 ms 119152 KB Output is correct
19 Correct 61 ms 118152 KB Output is correct
20 Correct 62 ms 119272 KB Output is correct
21 Correct 74 ms 119392 KB Output is correct
22 Correct 79 ms 120408 KB Output is correct
23 Correct 85 ms 120900 KB Output is correct
24 Correct 88 ms 124776 KB Output is correct
25 Correct 71 ms 124044 KB Output is correct
26 Correct 88 ms 125512 KB Output is correct
27 Correct 85 ms 121156 KB Output is correct
28 Correct 77 ms 123844 KB Output is correct
29 Correct 83 ms 124812 KB Output is correct
30 Correct 89 ms 121540 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 56 ms 117708 KB Output is correct
2 Correct 60 ms 118440 KB Output is correct
3 Correct 62 ms 118576 KB Output is correct
4 Correct 57 ms 117796 KB Output is correct
5 Correct 58 ms 117832 KB Output is correct
6 Correct 59 ms 118000 KB Output is correct
7 Correct 57 ms 118128 KB Output is correct
8 Correct 59 ms 117912 KB Output is correct
9 Correct 59 ms 118596 KB Output is correct
10 Correct 59 ms 118636 KB Output is correct
11 Correct 313 ms 135244 KB Output is correct
12 Correct 1613 ms 239536 KB Output is correct
13 Correct 1930 ms 246560 KB Output is correct
14 Correct 691 ms 150852 KB Output is correct
15 Correct 707 ms 150900 KB Output is correct
16 Correct 696 ms 150196 KB Output is correct
17 Correct 1828 ms 244996 KB Output is correct
18 Runtime error 1367 ms 262148 KB Execution killed with signal 9
19 Halted 0 ms 0 KB -