Submission #1369038

#TimeUsernameProblemLanguageResultExecution timeMemory
1369038AliMark71Game (IOI14_game)C++20
100 / 100
165 ms15912 KiB
//
//  main.cpp
//  IntensiveCamp 1 2026
//
//  Created by Ali AlSalman on 27/04/2026.
//
 
#include <bits/stdc++.h>


#define INTERACTIVE
#define TESTCASES
//#define SPOJ_BULLSCHEI__SZ__E__KIJETESANPAKALU__
 
#ifndef INTERACTIVE
#define endl '\n'
#endif
 
template<typename T>
using vec = std::vector<T>;
using namespace std;

struct DSU {
    int size;
    vec<int> par, siz;
    vec<vec<int>> q;
    DSU() = default;
    DSU(int n) : size(n), par(n, -1), siz(n, 1), q(n, vec<int>(n)) {}
    
    int find(int a) {
        if (par[a] == -1) return a;
        return par[a] = find(par[a]);
    }
    
    bool conn(int a, int b) {
        a = find(a); b = find(b);
        q[a][b]++;
        q[b][a]++;
        if (q[a][b] == siz[a] * siz[b]) {
            merge(a, b);
            return true;
        }
        return false;
    }
    
    void merge(int a, int b) {
        a = find(a); b = find(b);
        if (a == b) return;
        
        if (siz[a] < siz[b]) swap(a, b);
        par[b] = a;
        siz[a] += siz[b];
        for (int i = 0; i < size; i++) if (i != a && i != b) {
            q[a][i] += q[b][i];
            q[i][a] += q[i][b];
        }
    }
};

DSU d;

void initialize(int n) {
    d = DSU(n);
}
int hasEdge(int u, int v) {
    return d.conn(u, v);
}


void solve() {
    
}
 
//int main() {
//#ifndef INTERACTIVE
//    ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr);
//#endif
//    
//    int t = 1;
//#ifdef TESTCASES
//    cin>>t;
//#endif
//    
//    for (int i = t; i--;) {
//#if defined(TESTCASES) && defined(SPOJ_BULLSCHEI__SZ__E__KIJETESANPAKALU__)
//        cout<<"Case "<<t-i<<":\n";
//#elif defined(SPOJ_BULLSCHEI__SZ__E__KIJETESANPAKALU__)
//#warning SPOJ_BULLSCHEIßE__KIJETESANPAKALU__ without TESTCASES doesn't ducking make sense!
//#endif
//        solve();
//        nexttestcase:
//    }
//    return 0;
//}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...