Submission #569795

# Submission time Handle Problem Language Result Execution time Memory
569795 2022-05-27T20:02:45 Z definitelynotmee Parachute rings (IOI12_rings) C++
38 / 100
1122 ms 262144 KB
#include<bits/stdc++.h>
#define mp make_pair
#define mt make_tuple
#define all(x) x.begin(), x.end()
#define ff first
#define ss second
using namespace std;
template <typename T>
using matrix = vector<vector<T>>;
typedef unsigned int uint;
typedef unsigned long long ull;
typedef long long ll;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
const ll INFL = (1LL<<62)-1;
const int INF = (1<<30)-1;
const double EPS = 1e-7;
const int MOD = 1e9 + 7;
const int RANDOM = chrono::high_resolution_clock::now().time_since_epoch().count();
const int MAXN = 1e6+1;

struct UnionFind{
    bool good = 1;
    int root;
    vector<int> pai, degree;

    UnionFind(int n = 0, int start = 0){
        root = start;
        pai = vector<int>(n+1);
        iota(all(pai),0);
        degree = vector<int>(n+1);
    }
    int find (int id){
        if(pai[id] == id)
            return id;
        return pai[id] = find(pai[id]);
    }
    void onion(int a, int b){

        if(a == root || b == root)
            return;
        //cout << root << " push(" << a << ',' << b << ")\n";
        degree[a]++;
        degree[b]++;
        if(degree[a] == 3)
            good = 0;//, cout << "=>" << root << " bad " << a <<  "\n";
        if(degree[b] == 3)
            good = 0;//, cout << "=>" << root << " bad " << b <<  "\n";
        a = find(a), b = find(b);
        if(a!=b){
            pai[b] = a;
        } else {
            good = 0;//, cout << "=>" << root << " badc\n";
        }
    }
};

struct UnionFind2{
    int cycle = -1;
    int cyclect = 0;
    vector<int> pai, sizee;

    UnionFind2(int n = 0){
        pai = vector<int>(n+1);
        sizee = vector<int> (n+1,1);
        iota(all(pai),0);
    }
    int find (int id){
        if(pai[id] == id)
            return id;
        return pai[id] = find(pai[id]);
    }
    void onion(int a, int b){
        a = find(a), b = find(b);
        if(a == b){
            cycle = a;
            cyclect++;
        } else{
            sizee[a] += sizee[b];
            pai[b] = a;
        }
    }
} ufsmall;

int n;

matrix<int> g;
vector<int> cand;
vector<UnionFind> uf;

int mode = 0;
int mode2big;

void inituf(int x, int y){
    if(mode < 2)
    for(int i : g[x]){
        if(cand[i]!=-1)
            continue;
        cand[i] = uf.size();
        uf.push_back(UnionFind(n,i));
        for(int j = 0; j < n; j++){
            for(int k : g[j]){
                if(j > k)
                    continue;
                int a = j , b = k;
                if(!(a == min(x,y) && b == max(x,y)))
                    uf.back().onion(j,k);
            }
        }
    }
    if(cand[x]==-1){
        cand[x] = uf.size();
        uf.push_back(UnionFind(n,x));
        for(int j = 0; j < n; j++){
            for(int k : g[j]){
                if(j > k)
                    continue;
                int a = j , b = k;
                if(!(a == min(x,y) && b == max(x,y)))
                    uf.back().onion(j,k);
            }
        }
    }

}


void Init(int N_) {

  n = N_;
  g = matrix<int>(n+1);
  cand = vector<int>(n+1,-1);
  ufsmall = UnionFind2(n);
}

void Link(int A, int B) {
    if(mode == 3)
        return;
    g[A].push_back(B);
    g[B].push_back(A);
    if(g[A].size() == 4){
        if(mode == 2){
            mode = 3;
            return;
        }else mode2big = A, mode = 2, uf.clear(), fill(all(cand),-1), inituf(A,B);
    }
    if(g[B].size() == 4){
        if(mode == 2){
            mode = 3;
            return;
        }else mode2big = B, mode = 2, uf.clear(), fill(all(cand),-1), inituf(B,A);
    }
    if(g[A].size() == 3 && mode < 2){
        mode = 1;
        inituf(A,B);
    }
    if(g[B].size() == 3 && mode < 2){
        mode = 1;
        inituf(B,A);
    }
    if(mode == 0){
        ufsmall.onion(A,B);
        if(ufsmall.cyclect >= 2)
            mode = 3;
    }
    for(auto& i : uf){
        i.onion(A,B);
    }

}

int CountCritical() {
    if(mode == 3)
        return 0;
    if(mode == 0){
        if(ufsmall.cyclect == 0)
            return n;
        assert(ufsmall.cycle >= 0);
        return ufsmall.sizee[ufsmall.cycle];
    }
    int resp =0;
    for(auto& i : uf){
        //cout << "->" << i.root << ' ' << i.good << '\n';
        resp+=i.good;
    }

    return resp;
}
# Verdict Execution time Memory Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 3 ms 724 KB Output is correct
3 Correct 2 ms 724 KB Output is correct
4 Correct 1 ms 308 KB Output is correct
5 Correct 1 ms 468 KB Output is correct
6 Correct 3 ms 724 KB Output is correct
7 Correct 3 ms 2004 KB Output is correct
8 Correct 2 ms 596 KB Output is correct
9 Correct 3 ms 852 KB Output is correct
10 Correct 3 ms 980 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 390 ms 35152 KB Output is correct
2 Correct 1094 ms 68916 KB Output is correct
3 Correct 322 ms 130476 KB Output is correct
4 Correct 1042 ms 67096 KB Output is correct
5 Correct 1020 ms 67076 KB Output is correct
6 Correct 991 ms 65872 KB Output is correct
7 Runtime error 258 ms 262144 KB Execution killed with signal 9
8 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 3 ms 724 KB Output is correct
3 Correct 2 ms 724 KB Output is correct
4 Correct 1 ms 308 KB Output is correct
5 Correct 1 ms 468 KB Output is correct
6 Correct 3 ms 724 KB Output is correct
7 Correct 3 ms 2004 KB Output is correct
8 Correct 2 ms 596 KB Output is correct
9 Correct 3 ms 852 KB Output is correct
10 Correct 3 ms 980 KB Output is correct
11 Correct 84 ms 17756 KB Output is correct
12 Correct 202 ms 39112 KB Output is correct
13 Correct 7 ms 1620 KB Output is correct
14 Correct 3 ms 980 KB Output is correct
15 Correct 3 ms 1620 KB Output is correct
16 Correct 4 ms 980 KB Output is correct
17 Correct 1122 ms 78520 KB Output is correct
18 Correct 26 ms 18252 KB Output is correct
19 Correct 4 ms 980 KB Output is correct
20 Correct 9 ms 1576 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 3 ms 724 KB Output is correct
3 Correct 2 ms 724 KB Output is correct
4 Correct 1 ms 308 KB Output is correct
5 Correct 1 ms 468 KB Output is correct
6 Correct 3 ms 724 KB Output is correct
7 Correct 3 ms 2004 KB Output is correct
8 Correct 2 ms 596 KB Output is correct
9 Correct 3 ms 852 KB Output is correct
10 Correct 3 ms 980 KB Output is correct
11 Correct 84 ms 17756 KB Output is correct
12 Correct 202 ms 39112 KB Output is correct
13 Correct 7 ms 1620 KB Output is correct
14 Correct 3 ms 980 KB Output is correct
15 Correct 3 ms 1620 KB Output is correct
16 Correct 4 ms 980 KB Output is correct
17 Correct 1122 ms 78520 KB Output is correct
18 Correct 26 ms 18252 KB Output is correct
19 Correct 4 ms 980 KB Output is correct
20 Correct 9 ms 1576 KB Output is correct
21 Correct 15 ms 3084 KB Output is correct
22 Correct 23 ms 4652 KB Output is correct
23 Correct 32 ms 5924 KB Output is correct
24 Correct 41 ms 6460 KB Output is correct
25 Correct 19 ms 6868 KB Output is correct
26 Correct 38 ms 6740 KB Output is correct
27 Correct 35 ms 5540 KB Output is correct
28 Runtime error 453 ms 262144 KB Execution killed with signal 9
29 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 3 ms 724 KB Output is correct
3 Correct 2 ms 724 KB Output is correct
4 Correct 1 ms 308 KB Output is correct
5 Correct 1 ms 468 KB Output is correct
6 Correct 3 ms 724 KB Output is correct
7 Correct 3 ms 2004 KB Output is correct
8 Correct 2 ms 596 KB Output is correct
9 Correct 3 ms 852 KB Output is correct
10 Correct 3 ms 980 KB Output is correct
11 Correct 390 ms 35152 KB Output is correct
12 Correct 1094 ms 68916 KB Output is correct
13 Correct 322 ms 130476 KB Output is correct
14 Correct 1042 ms 67096 KB Output is correct
15 Correct 1020 ms 67076 KB Output is correct
16 Correct 991 ms 65872 KB Output is correct
17 Runtime error 258 ms 262144 KB Execution killed with signal 9
18 Halted 0 ms 0 KB -