제출 #1324299

#제출 시각아이디문제언어결과실행 시간메모리
1324299nicolo_010게임 (IOI14_game)C++20
0 / 100
1 ms332 KiB
#include "game.h" #include <bits/stdc++.h> using namespace std; struct DSU { vector<int> rank, parent; void init(int n) { rank.assign(n, 1); parent.resize(n); for (int i=0; i<n; i++) { parent[i] = i; } } int find(int n) { return (n == parent[n] ? n : parent[n] = find(parent[n])); } bool sameComponent(int n1, int n2) { int p1 = find(n1); int p2 = find(n2); return p1==p2; } void unite(int n1, int n2) { int p1 = find(n1); int p2 = find(n2); if (p1==p2) return; if (rank[p1] >= rank[p2]) { rank[p1] += rank[p2]; parent[p2] = p1; } else { rank[p2] += rank[p1]; parent[p1] = p2; } } }; DSU dsu; int n; vector<vector<int>> s; void initialize(int _n) { n = _n; s.assign(n, vector<int>(n, 1)); for (int i=0; i<n; i++) { s[i][i] = 0; } dsu.init(n); } int hasEdge(int u, int v) { bool ans = (s[u][v] == 1); int pu = dsu.find(u); int pv = dsu.find(v); if (ans==0) { s[pu][pv]--; s[pv][pu]--; } else { dsu.unite(u, v); int w = dsu.find(u); for (int i=0; i<n; i++) { s[w][i] = s[pu][i] + s[pv][i]; s[i][w] = s[w][i]; } } return ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...