# | TimeUTC-0 | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
467340 | SirCovidThe19th | Swapping Cities (APIO20_swap) | C++17 | 411 ms | 41464 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
const int mx = 3e5 + 5;
int node, par[mx], up[mx][19], vals[mx], dep[mx]; bool ok[mx][19], cyc[mx];
vector<int> adj[mx];
int get(int i){
return i == par[i] ? i : par[i] = get(par[i]);
}
void merge(int a, int b){
a = get(a); b = get(b);
cyc[node] = (a == b) or cyc[a] or cyc[b];
adj[node].push_back(a); if (a != b) adj[node].push_back(b);
par[a] = par[b] = node++;
}
void dfs(int i){
for (int l = 1; l < 19; l++){
up[i][l] = up[up[i][l - 1]][l - 1];
ok[i][l] = ok[up[i][l - 1]][l - 1] | ok[i][l - 1];
}
for (auto x : adj[i]){
up[x][0] = i; ok[x][0] = cyc[i];
dep[x] = dep[i] + 1; dfs(x);
}
}
void init(int n, int m, vector<int> u, vector<int> v, vector<int> w){
int idx[m]; node = n + 1; iota(idx, idx + m, 0); iota(par, par + n + m + 1, 0);
sort(idx, idx + m, [&](int a, int b){ return w[a] < w[b]; });
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |