Submission #247329

#TimeUsernameProblemLanguageResultExecution timeMemory
247329dwscLokahian Relics (FXCUP4_lokahia)C++17
100 / 100
9 ms844 KiB
#include <bits/stdc++.h> #include "lokahia.h" using namespace std; int p[210]; int visit[210][210]; int num[210]; int findset(int i){ return p[i]==i?p[i]:p[i]=findset(p[i]); } int FindBase(int N){ srand(3082); int counter = 0; for (int i = 0; i < N; i++) p[i] = i; int fail = 0; while (counter < 100){ int a = rand()%N,b = rand()%N; if (fail > 100000) break; fail++; if (a == b) continue; if (visit[findset(a)][findset(b)]) continue; if (findset(a) == findset(b)) continue; fail = 0; counter++; int x = findset(a),y = findset(b); visit[x][y] = visit[y][x] = 1; int temp = CollectRelics(a,b); if (temp != -1) { for (int i = 0; i < N; i++){ visit[temp][i] = visit[i][temp] = max(visit[temp][i],max(visit[x][i],visit[y][i])); } p[x] = temp; p[y] = temp; } } for (int i = 0; i < N; i++){ num[findset(i)]++; } int maxi = 0,cur = -1; for (int i = 0; i < N; i++){ if (num[i] >= maxi){ maxi = num[i]; cur = i; } } int tot = 0; for (int i = 0; i < N; i++){ if (findset(i)== cur) tot++; else tot += CollectRelics(i,cur)!=-1; } if (tot > N/2) return cur; return -1; }
#Verdict Execution timeMemoryGrader output
Fetching results...