제출 #365005

#제출 시각UTC-0아이디문제언어결과실행 시간메모리
3650052021-02-10 17:52:42tatyam자매 도시 (APIO20_swap)C++17
100 / 100
456 ms23660 KiB
#include <bits/stdc++.h>
using namespace std;
struct UnionFind{
vector<vector<pair<int, int>>> data;
vector<int> flag_time, degree;
UnionFind(int n = 0): data(n, {{-1, -1}}), flag_time(n, INT_MAX), degree(n){}
int merged_time(int x) const {
const auto [time, root] = data[x].back();
if(root < 0) return INT_MAX;
return time;
}
int root(int t, int x) const { // after t
if(t < merged_time(x)) return x;
return root(t, data[x].back().second);
}
bool unite(int t, int x, int y){
bool flag = ++degree[x] >= 3 || ++degree[y] >= 3;
x = root(t, x);
y = root(t, y);
if(x == y){
if(flag_time[x] == INT_MAX) flag_time[x] = t;
return 0;
}
const int size_x = data[x].back().second, size_y = data[y].back().second;
if(size_x > size_y) swap(x, y);
if(flag_time[x] == INT_MAX && (flag || flag_time[y] != INT_MAX)) flag_time[x] = t;
data[x].emplace_back(t, size_x + size_y);
data[y].emplace_back(t, x);
return 1;
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...