Submission #966646

# Submission time Handle Problem Language Result Execution time Memory
966646 2024-04-20T07:38:25 Z penguin133 Swapping Cities (APIO20_swap) C++17
6 / 100
230 ms 41840 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;
	if((int)waiting[a].size() < (int)waiting[b].size())swap(a, b);
	swap(waiting[cnt], waiting[a]);
	for(auto j : waiting[b])waiting[cnt].push_back(j);
	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 5 ms 20572 KB Output is correct
2 Correct 3 ms 20572 KB Output is correct
3 Correct 3 ms 20700 KB Output is correct
4 Correct 4 ms 20568 KB Output is correct
5 Correct 5 ms 20716 KB Output is correct
6 Correct 4 ms 20828 KB Output is correct
7 Correct 4 ms 20828 KB Output is correct
8 Correct 5 ms 20828 KB Output is correct
9 Correct 46 ms 30308 KB Output is correct
10 Correct 51 ms 32168 KB Output is correct
11 Correct 48 ms 31948 KB Output is correct
12 Correct 50 ms 32556 KB Output is correct
13 Correct 59 ms 32768 KB Output is correct
14 Correct 51 ms 30664 KB Output is correct
15 Correct 87 ms 36040 KB Output is correct
16 Correct 88 ms 35784 KB Output is correct
17 Correct 91 ms 36416 KB Output is correct
18 Correct 104 ms 36624 KB Output is correct
19 Correct 70 ms 31752 KB Output is correct
20 Correct 202 ms 41320 KB Output is correct
21 Correct 230 ms 41064 KB Output is correct
22 Correct 209 ms 41840 KB Output is correct
23 Correct 206 ms 41800 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 5 ms 20572 KB Output is correct
2 Correct 3 ms 20572 KB Output is correct
3 Incorrect 199 ms 36668 KB Output isn't correct
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 5 ms 20572 KB Output is correct
2 Correct 3 ms 20572 KB Output is correct
3 Correct 3 ms 20700 KB Output is correct
4 Correct 4 ms 20568 KB Output is correct
5 Correct 5 ms 20716 KB Output is correct
6 Correct 4 ms 20828 KB Output is correct
7 Correct 4 ms 20828 KB Output is correct
8 Correct 5 ms 20828 KB Output is correct
9 Correct 5 ms 24796 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 5 ms 24796 KB Output is correct
2 Correct 5 ms 20572 KB Output is correct
3 Correct 3 ms 20572 KB Output is correct
4 Correct 3 ms 20700 KB Output is correct
5 Correct 4 ms 20568 KB Output is correct
6 Correct 5 ms 20716 KB Output is correct
7 Correct 4 ms 20828 KB Output is correct
8 Correct 4 ms 20828 KB Output is correct
9 Correct 5 ms 20828 KB Output is correct
10 Correct 46 ms 30308 KB Output is correct
11 Correct 51 ms 32168 KB Output is correct
12 Correct 48 ms 31948 KB Output is correct
13 Correct 50 ms 32556 KB Output is correct
14 Correct 59 ms 32768 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 5 ms 20572 KB Output is correct
2 Correct 3 ms 20572 KB Output is correct
3 Correct 3 ms 20700 KB Output is correct
4 Correct 4 ms 20568 KB Output is correct
5 Correct 5 ms 20716 KB Output is correct
6 Correct 4 ms 20828 KB Output is correct
7 Correct 4 ms 20828 KB Output is correct
8 Correct 5 ms 20828 KB Output is correct
9 Correct 46 ms 30308 KB Output is correct
10 Correct 51 ms 32168 KB Output is correct
11 Correct 48 ms 31948 KB Output is correct
12 Correct 50 ms 32556 KB Output is correct
13 Correct 59 ms 32768 KB Output is correct
14 Correct 51 ms 30664 KB Output is correct
15 Correct 87 ms 36040 KB Output is correct
16 Correct 88 ms 35784 KB Output is correct
17 Correct 91 ms 36416 KB Output is correct
18 Correct 104 ms 36624 KB Output is correct
19 Incorrect 199 ms 36668 KB Output isn't correct
20 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 5 ms 24796 KB Output is correct
2 Correct 5 ms 20572 KB Output is correct
3 Correct 3 ms 20572 KB Output is correct
4 Correct 3 ms 20700 KB Output is correct
5 Correct 4 ms 20568 KB Output is correct
6 Correct 5 ms 20716 KB Output is correct
7 Correct 4 ms 20828 KB Output is correct
8 Correct 4 ms 20828 KB Output is correct
9 Correct 5 ms 20828 KB Output is correct
10 Correct 46 ms 30308 KB Output is correct
11 Correct 51 ms 32168 KB Output is correct
12 Correct 48 ms 31948 KB Output is correct
13 Correct 50 ms 32556 KB Output is correct
14 Correct 59 ms 32768 KB Output is correct
15 Correct 51 ms 30664 KB Output is correct
16 Correct 87 ms 36040 KB Output is correct
17 Correct 88 ms 35784 KB Output is correct
18 Correct 91 ms 36416 KB Output is correct
19 Correct 104 ms 36624 KB Output is correct
20 Incorrect 199 ms 36668 KB Output isn't correct
21 Halted 0 ms 0 KB -