Submission #247131

#TimeUsernameProblemLanguageResultExecution timeMemory
247131oolimryLokahian Relics (FXCUP4_lokahia)C++17
0 / 100
1095 ms688 KiB
#include "lokahia.h" #include <bits/stdc++.h> using namespace std; typedef pair<int,int> ii; int p[205]; int sz[205]; int findSet(int u){ if(u == p[u]) return u; else return findSet(p[u]); } int SZ(int u){ return sz[findSet(u)]; } void unionSet(int u, int P){ u = findSet(u), P = findSet(P); p[u] = P; sz[P] += sz[u]; } int FindBase(int N){ srand(time(NULL)); vector<int> v; for(int i = 0;i < N;i++) v.push_back(i); for(int i = 0;i < N;i++){ p[i] = i; sz[i] = 1; } int cnt = 0; while(cnt < 300){ int sz = v.size(); int i = rand() % (sz); int j = rand() % (sz); if(i > j) swap(i,j); if(i == j) continue; int a = v[i], b = v[j]; int x = CollectRelics(a, b); cnt++; if(x == -1) continue; vector<int> nxt; for(int k : v){ if(k != a && k != b) nxt.push_back(k); } nxt.push_back(x); v = nxt; nxt.clear(); if(a != x) unionSet(a,x); if(b != x) unionSet(b,x); if(SZ(x) > (N/2)){ //cout << x << "\n"; return x; } } //assert(false); return -1; }
#Verdict Execution timeMemoryGrader output
Fetching results...