Submission #259322

# Submission time Handle Problem Language Result Execution time Memory
259322 2020-08-07T14:44:40 Z Sorting Parachute rings (IOI12_rings) C++17
0 / 100
1590 ms 108188 KB
#include <bits/stdc++.h>

using namespace std;

const int k_N = 1e6 + 3;

int n;
int p[k_N], sz[k_N];

vector<int> adj[k_N], adj2[k_N];

int cnt[k_N], req;
int four;

int get_p(int u){
    if(p[u] == u) return u;
    return p[u] = get_p(p[u]);
}

bool unite(int u, int v){
    if(get_p(u) == get_p(v))
        return false;

    if(sz[p[u]] < sz[p[v]])
        swap(u, v);

    sz[p[u]] += sz[p[v]];
    p[p[v]] = p[u];

    return true;
}

void Init(int n_){
    n = n_;

    for(int i = 0; i < n; ++i){
        p[i] = i;
        sz[i] = 1;
        cnt[i] = 0;

        adj[i].clear();
        adj2[i].clear();
    }

    req = 0;
    four = 0;
}

bool dfs(int a, int b, int parent = -1){
    if(a == b){
        cnt[a]++;
        return true;
    }

    for(int to: adj[a]){
        if(to == parent) continue;
        if(dfs(to, b, a)){
            cnt[a]++;
            return true;
        }
    }
    return false;
}

void Link(int a, int b){
    adj2[a].push_back(b);
    adj2[b].push_back(a);

    if(adj2[a].size() >= 4 || adj2[b].size() >= 4) four++;
    if(adj2[a].size() == 3){
        req++;
        cnt[a]++;
    }
    if(adj2[b].size() == 3){
        req++;
        cnt[b]++;
    }

    if(!unite(a, b)){
        req++;
        dfs(a, b);
    }
    else{
        adj[a].push_back(b);
        adj[b].push_back(a);
    }
}

int CountCritical(){
    if(four >= 2) return 0;

    int ans = 0;
    for(int i = 0; i < n; ++i){
        if(four && adj2[i].size() < 4) continue;
        int curr_req = cnt[i];
        for(int to: adj2[i])
            curr_req += (adj2[to].size() == 3);
        ans += (req == curr_req);
    }
    return ans;
}
# Verdict Execution time Memory Grader output
1 Correct 28 ms 47360 KB Output is correct
2 Correct 31 ms 47616 KB Output is correct
3 Incorrect 32 ms 47744 KB Output isn't correct
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 857 ms 87420 KB Output is correct
2 Incorrect 1590 ms 108188 KB Output isn't correct
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 28 ms 47360 KB Output is correct
2 Correct 31 ms 47616 KB Output is correct
3 Incorrect 32 ms 47744 KB Output isn't correct
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 28 ms 47360 KB Output is correct
2 Correct 31 ms 47616 KB Output is correct
3 Incorrect 32 ms 47744 KB Output isn't correct
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 28 ms 47360 KB Output is correct
2 Correct 31 ms 47616 KB Output is correct
3 Incorrect 32 ms 47744 KB Output isn't correct
4 Halted 0 ms 0 KB -