Submission #1262084

#TimeUsernameProblemLanguageResultExecution timeMemory
1262084motionGame (IOI14_game)C++20
42 / 100
128 ms13640 KiB
#include<bits/stdc++.h> using namespace std; int n; vector<int> p,s; vector<map<int,int>> vec; int FIND(int x) { return p[x] == x ? x : (p[x] = FIND(p[x])); } void unite(int x,int y) { int rx=FIND(x),ry=FIND(y); if(s[rx]<s[ry]) swap(rx,ry); s[rx]+=s[ry]; p[ry]=rx; for(int i=0;i<n;i++) { if(i==rx || i==ry) continue; vec[i][rx]+=vec[i][ry]; } for(auto [key,val]:vec[rx]) { vec[rx][key]+=vec[ry][key]; } } int hasEdge(int u,int v) { int ru=FIND(u),rv=FIND(v); if(vec[ru][rv]==s[rv]*s[ru]-1) { unite(ru,rv); return 1; } else { vec[ru][rv]++; vec[rv][ru]++; return 0; } } void initialize(int k) { n=k; s=vector<int>(n,1); vec=vector<map<int,int>>(n); for(int i=0;i<n;i++) { p.push_back(i); } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...