답안 #679540

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
679540 2023-01-08T13:04:43 Z Dan4Life 자매 도시 (APIO20_swap) C++17
6 / 100
468 ms 66660 KB
#include "swap.h"
#include <bits/stdc++.h>
using namespace std;
#define pb push_back

const int maxn = (int)5e5+10;
const int lgn = 20;

int n, m, num;
int jmp[lgn][maxn];
vector<int> adj[maxn];
bool line[maxn], good[maxn];
struct Edge{ int u, v, w; };
int p[maxn], lev[maxn], wei[maxn], deg[maxn];

Edge edge[maxn];

int getPath(int x, int steps){
	for(int i = lgn-1; i >= 0; i--)
		if(steps&(1<<i) and x!=-1) x = jmp[i][x];
	return x; 
}

int lca(int a, int b){
	if(a==b) return a;
	if(jmp[0][a]==jmp[0][b]) return jmp[0][a];
	if(lev[a] < lev[b]) swap(a,b);
	a = getPath(a, lev[a]-lev[b]);
	for(int i = lgn-1; i >= 0; i--)
		if(jmp[i][a]!=-1 and jmp[i][a]!=jmp[i][b])
			a = jmp[i][a], b = jmp[i][b];
	return lca(a,b);
}

int findSet(int i){ return p[i]==i?i:p[i]=findSet(p[i]); }
bool isSameSet(int i, int j) { return findSet(i)==findSet(j); }

void unionSet(Edge &e){
	int i = e.u, j = e.v; wei[num] = e.w;
	int x = findSet(i), y = findSet(j);
	deg[x]++, deg[y]++;
	p[x]=p[y]=p[num]=num;
	if(x!=y) adj[num].pb(y);
	adj[num].pb(x);
	good[num] |= good[x] or good[y] or (deg[x]>=3) or (deg[y]>=3) or (x==y);
	num++;
}

void dfs(int s, int p){
	if(p!=-1) lev[s] = lev[p]+1, jmp[0][s] = p;
	for(auto u : adj[s]) if(u!=p) dfs(u,s);
}

void init(int N, int M, vector<int> u, vector<int> v, vector<int> w) {
	n = N, m = M; num = n; memset(jmp,-1,sizeof(jmp));
	for(int i = 0; i <= n+m; i++) p[i] = i, line[i] = 1;
	for(int i = 0; i < m; i++) edge[i] = {u[i],v[i],w[i]};
	sort(edge,edge+m,[&](Edge &x, Edge &y){ return x.w<y.w; });
	for(int i = 0; i < m; i++) unionSet(edge[i]);
	dfs(num-1,-1);
	for(int i = 1; i < lgn; i++)
		for(int j = 0; j+(1<<i)-1 < num; j++)
			if(jmp[i-1][j]!=-1) jmp[i][j] = jmp[i-1][jmp[i-1][j]];
}

int getMinimumFuelCapacity(int x, int y) {
	int z = lca(x,y);
	for(int i = lgn-1; i >= 0; i--) 
		if(jmp[i][z]!=-1 and !good[jmp[i][z]]) z = jmp[i][z];
	if(good[z]) return wei[z];
	if(jmp[0][z]!=-1) z=jmp[0][z];
	return good[z]?wei[z]:-1;
}

/*
5 6
0 1 4
0 2 4
1 2 1
1 3 2
1 4 10
2 3 3
3
1 2
2 4
0 1
*/
# 결과 실행 시간 메모리 Grader output
1 Correct 21 ms 51156 KB Output is correct
2 Correct 21 ms 51192 KB Output is correct
3 Correct 22 ms 51140 KB Output is correct
4 Correct 19 ms 51156 KB Output is correct
5 Correct 21 ms 51236 KB Output is correct
6 Correct 22 ms 51244 KB Output is correct
7 Correct 22 ms 51304 KB Output is correct
8 Correct 24 ms 51216 KB Output is correct
9 Correct 73 ms 58828 KB Output is correct
10 Correct 85 ms 60420 KB Output is correct
11 Correct 88 ms 60376 KB Output is correct
12 Correct 87 ms 60828 KB Output is correct
13 Correct 78 ms 63200 KB Output is correct
14 Correct 87 ms 58912 KB Output is correct
15 Correct 208 ms 62372 KB Output is correct
16 Correct 189 ms 62100 KB Output is correct
17 Correct 198 ms 62620 KB Output is correct
18 Correct 370 ms 64928 KB Output is correct
19 Correct 95 ms 56392 KB Output is correct
20 Correct 197 ms 63764 KB Output is correct
21 Correct 201 ms 63656 KB Output is correct
22 Correct 201 ms 64260 KB Output is correct
23 Correct 368 ms 66660 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 21 ms 51156 KB Output is correct
2 Correct 21 ms 51192 KB Output is correct
3 Incorrect 468 ms 66560 KB Output isn't correct
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 21 ms 51156 KB Output is correct
2 Correct 21 ms 51192 KB Output is correct
3 Correct 22 ms 51140 KB Output is correct
4 Correct 19 ms 51156 KB Output is correct
5 Correct 21 ms 51236 KB Output is correct
6 Correct 22 ms 51244 KB Output is correct
7 Correct 22 ms 51304 KB Output is correct
8 Correct 24 ms 51216 KB Output is correct
9 Correct 22 ms 51132 KB Output is correct
10 Incorrect 22 ms 51272 KB Output isn't correct
11 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 22 ms 51132 KB Output is correct
2 Correct 21 ms 51156 KB Output is correct
3 Correct 21 ms 51192 KB Output is correct
4 Correct 22 ms 51140 KB Output is correct
5 Correct 19 ms 51156 KB Output is correct
6 Correct 21 ms 51236 KB Output is correct
7 Correct 22 ms 51244 KB Output is correct
8 Correct 22 ms 51304 KB Output is correct
9 Correct 24 ms 51216 KB Output is correct
10 Correct 73 ms 58828 KB Output is correct
11 Correct 85 ms 60420 KB Output is correct
12 Correct 88 ms 60376 KB Output is correct
13 Correct 87 ms 60828 KB Output is correct
14 Correct 78 ms 63200 KB Output is correct
15 Incorrect 22 ms 51272 KB Output isn't correct
16 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 21 ms 51156 KB Output is correct
2 Correct 21 ms 51192 KB Output is correct
3 Correct 22 ms 51140 KB Output is correct
4 Correct 19 ms 51156 KB Output is correct
5 Correct 21 ms 51236 KB Output is correct
6 Correct 22 ms 51244 KB Output is correct
7 Correct 22 ms 51304 KB Output is correct
8 Correct 24 ms 51216 KB Output is correct
9 Correct 73 ms 58828 KB Output is correct
10 Correct 85 ms 60420 KB Output is correct
11 Correct 88 ms 60376 KB Output is correct
12 Correct 87 ms 60828 KB Output is correct
13 Correct 78 ms 63200 KB Output is correct
14 Correct 87 ms 58912 KB Output is correct
15 Correct 208 ms 62372 KB Output is correct
16 Correct 189 ms 62100 KB Output is correct
17 Correct 198 ms 62620 KB Output is correct
18 Correct 370 ms 64928 KB Output is correct
19 Incorrect 468 ms 66560 KB Output isn't correct
20 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 22 ms 51132 KB Output is correct
2 Correct 21 ms 51156 KB Output is correct
3 Correct 21 ms 51192 KB Output is correct
4 Correct 22 ms 51140 KB Output is correct
5 Correct 19 ms 51156 KB Output is correct
6 Correct 21 ms 51236 KB Output is correct
7 Correct 22 ms 51244 KB Output is correct
8 Correct 22 ms 51304 KB Output is correct
9 Correct 24 ms 51216 KB Output is correct
10 Correct 73 ms 58828 KB Output is correct
11 Correct 85 ms 60420 KB Output is correct
12 Correct 88 ms 60376 KB Output is correct
13 Correct 87 ms 60828 KB Output is correct
14 Correct 78 ms 63200 KB Output is correct
15 Correct 87 ms 58912 KB Output is correct
16 Correct 208 ms 62372 KB Output is correct
17 Correct 189 ms 62100 KB Output is correct
18 Correct 198 ms 62620 KB Output is correct
19 Correct 370 ms 64928 KB Output is correct
20 Incorrect 468 ms 66560 KB Output isn't correct
21 Halted 0 ms 0 KB -