Submission #966554

# Submission time Handle Problem Language Result Execution time Memory
966554 2024-04-20T03:54:43 Z penguin133 Swapping Cities (APIO20_swap) C++17
6 / 100
219 ms 36280 KB
#include <bits/stdc++.h>
using namespace std;
#include "swap.h"
//#define int long long
#define pi pair<int, int>
#define pii pair<int, pi>
#define fi first
#define se second
#ifdef _WIN32
#define getchar_unlocked _getchar_nolock
#endif
mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count());

vector <int> waiting[200005];
int par[200005], val[200005], deg[200005], good[200005], up[20][200005], dep[200005];
int cnt = 1;
pi adj[200005];
int getr(int x){return par[x] == x ? x : par[x] = getr(par[x]);}
void merge(int a, int b, int c){
	//cout << a << ' ' << b << ' ' << c << '\n';
	a = getr(a); b = getr(b);
	if(a == b)return;
	par[a] = par[b] = up[0][a] = up[0][b] = cnt;
	val[cnt] = c;
	adj[cnt] = {a, b};
	cnt++;
}

int par2[200005];
int g2(int x){return par2[x] == x ? x : par2[x] = g2(par2[x]);}
void m2(int a, int b){par2[g2(b)] = g2(a);}

void dfs(int x, int d){
	//cout << x << '\n';
	dep[x] = d;
	if(!adj[x].fi)return;
	dfs(adj[x].fi, d + 1);
	dfs(adj[x].se, d + 1);
}

int lca(int u, int v){
	if(dep[u] > dep[v])swap(u, v);
	int df = dep[v] -dep[u];
	for(int i = 0; i < 19; i++)if(df >> i & 1)v = up[i][v];
	if(u ==v )return u;
	for(int i = 19; i >=0 ; i--)if(up[i][u] != up[i][v])u = up[i][u], v = up[i][v];
	return up[0][u];
}

void init(int N, int M,
          std::vector<int> U, std::vector<int> V, std::vector<int> W) {
	vector <pii> bb;
	cnt = N;
	for(int i = 0; i < 2 * N; i++)par[i] = par2[i] = i;
	for(int i = 0; i < M; i++)bb.push_back({W[i], {U[i], V[i]}});
	sort(bb.begin(), bb.end());
	for(auto i : bb){
		int a = i.se.fi, b = i.se.se, w = i.fi;
		if(g2(a) == g2(b)){
			good[getr(a)] = 1;
			good[getr(b)] = 1;
			queue <int> q;
			q.push(getr(a));
			q.push(getr(b));
			
			merge(a, b, w);
			while(!q.empty()){
				int x = q.front(); q.pop();
				//if(good[x])continue;
				//good[x] = 1;
				for(auto j : waiting[x]){
					if(!good[j]){
						good[j] = 1;
						merge(x, j, w);
						q.push(j);
					}
				}
				waiting[x].clear();
			}
		}
		else{
			m2(a, b);
			if(good[getr(a)] || good[getr(b)])merge(a, b, w);
			else{
				deg[a]++; deg[b]++;
				if(max(deg[a], deg[b]) >= 3){
					good[getr(a)] = good[getr(b)] = 1;
					merge(a, b, w);
					queue <int> q;
					q.push(getr(a));
					while(!q.empty()){
						int x = q.front(); q.pop();
						for(auto j : waiting[x]){
							if(!good[j]){
								good[j] = 1;
								merge(x, j, w);
								q.push(j);
							}
						}
						waiting[x].clear();
					}
				}
				else waiting[getr(a)].push_back(getr(b)), waiting[getr(b)].push_back(getr(a));
			}
		}
	}
	for(int i = cnt - 1; i >= N; i--)if(!dep[i])dfs(i, 1);
	for(int i = 1; i <= 19; i++)for(int j = 0; j < 2 * N; j++)up[i][j] = up[i - 1][up[i - 1][j]];
}

int getMinimumFuelCapacity(int X, int Y) {
  if(getr(X) != getr(Y))return -1;
  //cout << lca(X, Y) << ' ';
  return val[lca(X, Y)];
}
# Verdict Execution time Memory Grader output
1 Correct 4 ms 20568 KB Output is correct
2 Correct 5 ms 20572 KB Output is correct
3 Correct 4 ms 20748 KB Output is correct
4 Correct 4 ms 20572 KB Output is correct
5 Correct 5 ms 20828 KB Output is correct
6 Correct 4 ms 20572 KB Output is correct
7 Correct 4 ms 20828 KB Output is correct
8 Correct 5 ms 20828 KB Output is correct
9 Correct 42 ms 28660 KB Output is correct
10 Correct 56 ms 30204 KB Output is correct
11 Correct 49 ms 29896 KB Output is correct
12 Correct 51 ms 30404 KB Output is correct
13 Correct 50 ms 30664 KB Output is correct
14 Correct 52 ms 28784 KB Output is correct
15 Correct 91 ms 31716 KB Output is correct
16 Correct 98 ms 31388 KB Output is correct
17 Correct 103 ms 31980 KB Output is correct
18 Correct 91 ms 32200 KB Output is correct
19 Correct 67 ms 29572 KB Output is correct
20 Correct 199 ms 35596 KB Output is correct
21 Correct 219 ms 35636 KB Output is correct
22 Correct 194 ms 36280 KB Output is correct
23 Correct 189 ms 36044 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 4 ms 20568 KB Output is correct
2 Correct 5 ms 20572 KB Output is correct
3 Incorrect 210 ms 32840 KB Output isn't correct
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 4 ms 20568 KB Output is correct
2 Correct 5 ms 20572 KB Output is correct
3 Correct 4 ms 20748 KB Output is correct
4 Correct 4 ms 20572 KB Output is correct
5 Correct 5 ms 20828 KB Output is correct
6 Correct 4 ms 20572 KB Output is correct
7 Correct 4 ms 20828 KB Output is correct
8 Correct 5 ms 20828 KB Output is correct
9 Correct 4 ms 24668 KB Output is correct
10 Incorrect 5 ms 24924 KB Output isn't correct
11 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 4 ms 24668 KB Output is correct
2 Correct 4 ms 20568 KB Output is correct
3 Correct 5 ms 20572 KB Output is correct
4 Correct 4 ms 20748 KB Output is correct
5 Correct 4 ms 20572 KB Output is correct
6 Correct 5 ms 20828 KB Output is correct
7 Correct 4 ms 20572 KB Output is correct
8 Correct 4 ms 20828 KB Output is correct
9 Correct 5 ms 20828 KB Output is correct
10 Correct 42 ms 28660 KB Output is correct
11 Correct 56 ms 30204 KB Output is correct
12 Correct 49 ms 29896 KB Output is correct
13 Correct 51 ms 30404 KB Output is correct
14 Correct 50 ms 30664 KB Output is correct
15 Incorrect 5 ms 24924 KB Output isn't correct
16 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 4 ms 20568 KB Output is correct
2 Correct 5 ms 20572 KB Output is correct
3 Correct 4 ms 20748 KB Output is correct
4 Correct 4 ms 20572 KB Output is correct
5 Correct 5 ms 20828 KB Output is correct
6 Correct 4 ms 20572 KB Output is correct
7 Correct 4 ms 20828 KB Output is correct
8 Correct 5 ms 20828 KB Output is correct
9 Correct 42 ms 28660 KB Output is correct
10 Correct 56 ms 30204 KB Output is correct
11 Correct 49 ms 29896 KB Output is correct
12 Correct 51 ms 30404 KB Output is correct
13 Correct 50 ms 30664 KB Output is correct
14 Correct 52 ms 28784 KB Output is correct
15 Correct 91 ms 31716 KB Output is correct
16 Correct 98 ms 31388 KB Output is correct
17 Correct 103 ms 31980 KB Output is correct
18 Correct 91 ms 32200 KB Output is correct
19 Incorrect 210 ms 32840 KB Output isn't correct
20 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 4 ms 24668 KB Output is correct
2 Correct 4 ms 20568 KB Output is correct
3 Correct 5 ms 20572 KB Output is correct
4 Correct 4 ms 20748 KB Output is correct
5 Correct 4 ms 20572 KB Output is correct
6 Correct 5 ms 20828 KB Output is correct
7 Correct 4 ms 20572 KB Output is correct
8 Correct 4 ms 20828 KB Output is correct
9 Correct 5 ms 20828 KB Output is correct
10 Correct 42 ms 28660 KB Output is correct
11 Correct 56 ms 30204 KB Output is correct
12 Correct 49 ms 29896 KB Output is correct
13 Correct 51 ms 30404 KB Output is correct
14 Correct 50 ms 30664 KB Output is correct
15 Correct 52 ms 28784 KB Output is correct
16 Correct 91 ms 31716 KB Output is correct
17 Correct 98 ms 31388 KB Output is correct
18 Correct 103 ms 31980 KB Output is correct
19 Correct 91 ms 32200 KB Output is correct
20 Incorrect 210 ms 32840 KB Output isn't correct
21 Halted 0 ms 0 KB -