제출 #1207179

#제출 시각아이디문제언어결과실행 시간메모리
1207179porquenomedejainiciarsesion게임 (IOI14_game)C++20
100 / 100
499 ms27352 KiB
#include <bits/stdc++.h> using namespace std; vector<int> r; vector<int> p; unordered_map<int,unordered_map<int,int>> M; vector<int> elementos; int n; void init(int n){ r.assign(n,0); for(int i=0;i<n;i++){ p.push_back(i); } elementos.assign(n,1); } int encontrar(int x){ if(p[x]!=x){ p[x]=encontrar(p[x]); } return p[x]; } void unir(int x,int y){ int r_x,r_y; r_x=encontrar(x); r_y=encontrar(y); if(r[r_x]>r[r_y]){ r[r_x]+=r[r_y]; p[r_y]=r_x; }else{ r[r_y]+=r[r_x]; p[r_x]=r_y; } } void initialize(int N){ n=N; init(n); } int hasEdge(int u, int v){ int capital1,capital2,capitalganadora; capital1=encontrar(u); capital2=encontrar(v); if(M[capital1][capital2]==elementos[capital1]*elementos[capital2]-1){ unir(u,v); capitalganadora=encontrar(u); if(capital1==capitalganadora){ elementos[capital1]+=elementos[capital2]; for(auto x:M[capital2]){ M[capital1][x.first]+=x.second; M[x.first][capital1]=M[capital1][x.first]; } }else{ elementos[capital2]+=elementos[capital1]; for(auto x:M[capital1]){ M[capital2][x.first]+=x.second; M[x.first][capital2]=M[capital2][x.first]; } } return 1; }else{ M[capital1][capital2]++; M[capital2][capital1]=M[capital1][capital2]; return 0; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...