Submission #422133

#TimeUsernameProblemLanguageResultExecution timeMemory
422133daanolavGame (IOI14_game)C++14
0 / 100
13 ms23760 KiB
#include "game.h" #include <vector> using namespace std; #define MAXN 1000001 typedef vector<int> vi; int n; int ufParent[MAXN]; int ufSize[MAXN]; int ufLinkingPossibilities[MAXN]; vi ufPossibleConnections[MAXN]; int ufFind(int a) { if(ufParent[a] == a) { return a; } ufParent[a] = ufFind(ufParent[a]); return ufParent[a]; } void ufUnite(int a, int b) { a = ufFind(a); b = ufFind(b); if(ufSize[a] > ufSize[b]) { swap(a,b); } ufParent[b] = a; ufSize[a] += ufSize[b]; for(int i = 0; i < n; ++i) { if(i == a || i == b) { //ufLinkingPossibilities[a] -= ufPossibleConnections[a][i]; ufPossibleConnections[a][i] = 0; } else { ufPossibleConnections[a][i] += ufPossibleConnections[b][i]; //ufLinkingPossibilities[a] += ufPossibleConnections[b][i]; ufPossibleConnections[i][a] += ufPossibleConnections[i][b]; ufPossibleConnections[i][b] = 0; } } } void initialize(int n) { ::n = n; for(int i = 0; i < n; ++i) { ufParent[i] = i; ufSize[i] = 1; ufLinkingPossibilities[i] = 0; for(int j = 0; j < n; ++j) { if(i == j) { ufPossibleConnections[i].push_back(0); continue; } ufPossibleConnections[i].push_back(1); ufLinkingPossibilities[i] += 1; } } } int hasEdge(int u,int v) { if(ufPossibleConnections[ufFind(u)][ufFind(v)] > 1) { return 0; } else { ufUnite(u,v); return 1; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...