Submission #968529

#TimeUsernameProblemLanguageResultExecution timeMemory
968529Hugo1729Game (IOI14_game)C++11
100 / 100
343 ms27224 KiB
#include <bits/stdc++.h> #include "game.h" using namespace std; int n; vector<int> e; vector<vector<int>> val; int find(int v){ if(e[v]<0)return v; else{ e[v]=find(e[v]); return e[v]; } } bool same(int x, int y){ return (find(x)==find(y)); } int sz(int v){ return -e[find(v)]; } void connect(int x, int y){ x=find(x); y=find(y); if(x==y)return; if(e[x]>e[y])swap(x,y); for(int i=0;i<n;i++){ if(find(i)==i){ int sus=val[y][i]; val[y][i]-=sus; val[i][y]-=sus; val[x][i]+=sus; val[i][x]+=sus; } } e[x]+=e[y]; e[y]=x; } void initialize(int s) { n=s; e.assign(n,-1); val.assign(n,vector<int>(n,0)); } int hasEdge(int u, int v) { u=find(u);v=find(v); if(u==v)return 1; // cout << v << ' ' << u << ' ' << sz(v)*sz(u) << ' ' << val[v][u] << ' ' << val[u][v] << '\n'; if(sz(v)*sz(u)==val[v][u]+1){ connect(v,u); return 1; }else{ val[v][u]++; val[u][v]++; return 0; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...