Submission #966556

# Submission time Handle Problem Language Result Execution time Memory
966556 2024-04-20T03:56:15 Z penguin133 Swapping Cities (APIO20_swap) C++17
6 / 100
209 ms 36204 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;
					
					queue <int> q;
					q.push(getr(a));
					q.push(getr(b));
					merge(a, b, w);
					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 3 ms 20572 KB Output is correct
2 Correct 3 ms 20572 KB Output is correct
3 Correct 4 ms 20572 KB Output is correct
4 Correct 4 ms 20572 KB Output is correct
5 Correct 4 ms 20828 KB Output is correct
6 Correct 4 ms 20572 KB Output is correct
7 Correct 4 ms 20984 KB Output is correct
8 Correct 4 ms 20828 KB Output is correct
9 Correct 48 ms 28872 KB Output is correct
10 Correct 47 ms 30148 KB Output is correct
11 Correct 48 ms 29896 KB Output is correct
12 Correct 49 ms 30336 KB Output is correct
13 Correct 49 ms 30668 KB Output is correct
14 Correct 44 ms 28880 KB Output is correct
15 Correct 96 ms 31688 KB Output is correct
16 Correct 101 ms 31408 KB Output is correct
17 Correct 94 ms 32056 KB Output is correct
18 Correct 91 ms 32268 KB Output is correct
19 Correct 71 ms 29576 KB Output is correct
20 Correct 186 ms 35524 KB Output is correct
21 Correct 185 ms 35440 KB Output is correct
22 Correct 209 ms 36204 KB Output is correct
23 Correct 199 ms 35988 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 3 ms 20572 KB Output is correct
2 Correct 3 ms 20572 KB Output is correct
3 Incorrect 162 ms 32840 KB Output isn't correct
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 3 ms 20572 KB Output is correct
2 Correct 3 ms 20572 KB Output is correct
3 Correct 4 ms 20572 KB Output is correct
4 Correct 4 ms 20572 KB Output is correct
5 Correct 4 ms 20828 KB Output is correct
6 Correct 4 ms 20572 KB Output is correct
7 Correct 4 ms 20984 KB Output is correct
8 Correct 4 ms 20828 KB Output is correct
9 Correct 5 ms 24668 KB Output is correct
10 Correct 5 ms 24920 KB Output is correct
11 Incorrect 4 ms 24924 KB Output isn't correct
12 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 5 ms 24668 KB Output is correct
2 Correct 3 ms 20572 KB Output is correct
3 Correct 3 ms 20572 KB Output is correct
4 Correct 4 ms 20572 KB Output is correct
5 Correct 4 ms 20572 KB Output is correct
6 Correct 4 ms 20828 KB Output is correct
7 Correct 4 ms 20572 KB Output is correct
8 Correct 4 ms 20984 KB Output is correct
9 Correct 4 ms 20828 KB Output is correct
10 Correct 48 ms 28872 KB Output is correct
11 Correct 47 ms 30148 KB Output is correct
12 Correct 48 ms 29896 KB Output is correct
13 Correct 49 ms 30336 KB Output is correct
14 Correct 49 ms 30668 KB Output is correct
15 Correct 5 ms 24920 KB Output is correct
16 Incorrect 4 ms 24924 KB Output isn't correct
17 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 3 ms 20572 KB Output is correct
2 Correct 3 ms 20572 KB Output is correct
3 Correct 4 ms 20572 KB Output is correct
4 Correct 4 ms 20572 KB Output is correct
5 Correct 4 ms 20828 KB Output is correct
6 Correct 4 ms 20572 KB Output is correct
7 Correct 4 ms 20984 KB Output is correct
8 Correct 4 ms 20828 KB Output is correct
9 Correct 48 ms 28872 KB Output is correct
10 Correct 47 ms 30148 KB Output is correct
11 Correct 48 ms 29896 KB Output is correct
12 Correct 49 ms 30336 KB Output is correct
13 Correct 49 ms 30668 KB Output is correct
14 Correct 44 ms 28880 KB Output is correct
15 Correct 96 ms 31688 KB Output is correct
16 Correct 101 ms 31408 KB Output is correct
17 Correct 94 ms 32056 KB Output is correct
18 Correct 91 ms 32268 KB Output is correct
19 Incorrect 162 ms 32840 KB Output isn't correct
20 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 5 ms 24668 KB Output is correct
2 Correct 3 ms 20572 KB Output is correct
3 Correct 3 ms 20572 KB Output is correct
4 Correct 4 ms 20572 KB Output is correct
5 Correct 4 ms 20572 KB Output is correct
6 Correct 4 ms 20828 KB Output is correct
7 Correct 4 ms 20572 KB Output is correct
8 Correct 4 ms 20984 KB Output is correct
9 Correct 4 ms 20828 KB Output is correct
10 Correct 48 ms 28872 KB Output is correct
11 Correct 47 ms 30148 KB Output is correct
12 Correct 48 ms 29896 KB Output is correct
13 Correct 49 ms 30336 KB Output is correct
14 Correct 49 ms 30668 KB Output is correct
15 Correct 44 ms 28880 KB Output is correct
16 Correct 96 ms 31688 KB Output is correct
17 Correct 101 ms 31408 KB Output is correct
18 Correct 94 ms 32056 KB Output is correct
19 Correct 91 ms 32268 KB Output is correct
20 Incorrect 162 ms 32840 KB Output isn't correct
21 Halted 0 ms 0 KB -