Submission #745597

#TimeUsernameProblemLanguageResultExecution timeMemory
745597Username4132Game (IOI14_game)C++14
100 / 100
409 ms25316 KiB
#include "game.h" #include<iostream> using namespace std; #define forn(i, n) for(int i=0; i<(int)n; ++i) const int MAXN=1510; int n, number[MAXN][MAXN], par[MAXN], si[MAXN]; int root(int a){ while(par[a]!=a) a=par[a]=par[par[a]]; return a; } void initialize(int N) { n=N; forn(i, n) par[i]=i, si[i]=1; } int hasEdge(int a, int b){ int ra=root(a), rb=root(b); if(ra==rb) return 0; if(si[ra]<si[rb]) swap(ra, rb); if(si[ra]*si[rb]-1 == number[ra][rb]){ forn(i, n) number[i][ra]+=number[i][rb]; forn(i, n) number[ra][i]+=number[rb][i]; si[ra]+=si[rb]; par[rb]=ra; return 1; } else{ number[ra][rb]++; number[rb][ra]++; return 0; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...