제출 #100395

#제출 시각아이디문제언어결과실행 시간메모리
100395luciocf게임 (IOI14_game)C++14
100 / 100
753 ms34296 KiB
#include <bits/stdc++.h> #include "game.h" using namespace std; const int maxn = 1510; typedef pair<int, int> pii; int N; int pai[maxn], peso[maxn]; int relation[maxn][maxn], single[maxn][maxn]; int Find(int x) { if (pai[x] == x) return x; return pai[x] = Find(pai[x]); } void Join(int x, int y) { x = Find(x), y = Find(y); if (x == y) return; if (peso[x] < peso[y]) swap(x, y); pai[y] = x, peso[x] += peso[y]; } void initialize(int n) { N = n; for (int i = 0; i < n; i++) pai[i] = i, peso[i] = 1; } int hasEdge(int u, int v) { if (Find(u) == Find(v)) return 0; int cu = Find(u), cv = Find(v); if (relation[cu][cv] == peso[cu]*peso[cv] || (relation[cu][cv] == peso[cu]*peso[cv]-1 && !single[u][v])) { Join(u, v); single[u][v] = single[v][u] = 1; if (Find(u) == cu) { for (int i = 0; i < N; i++) { relation[cu][i] += relation[cv][i]; relation[i][cu] += relation[i][cv]; } } else { for (int i = 0; i < N; i++) { relation[cv][i] += relation[cu][i]; relation[i][cv] += relation[i][cu]; } } return 1; } if (!single[u][v]) { single[u][v] = single[v][u] = 1; relation[cu][cv]++, relation[cv][cu]++; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...