답안 #573799

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
573799 2022-06-07T08:14:04 Z amunduzbaev Inside information (BOI21_servers) C++17
50 / 100
249 ms 44048 KB
#include "bits/stdc++.h"
using namespace std;

#define ar array

const int N = 2e5 + 5;
vector<ar<int, 2>> edges[N];
int par[N][20], ed[N], lift[N][20];
int tin[N], tout[N], t, d[N];

void dfs(int u){
	tin[u] = ++t;
	lift[u][0] = (ed[u] > ed[par[u][0]]);
	for(int j=1;j<20;j++){
		par[u][j] = par[par[u][j-1]][j-1];
		lift[u][j] = lift[u][j-1] + lift[par[u][j-1]][j-1];
	}
	
	for(auto x : edges[u]){
		if(x[0] == par[u][0]) continue;
		par[x[0]][0] = u, ed[x[0]] = x[1];
		d[x[0]] = d[u] + 1;
		dfs(x[0]);
	}
	tout[u] = t;
}

bool is(int a, int b) { return (tin[a] <= tin[b] && tout[b] <= tout[a]); }

int check(int a, int b, int t){
	if(a == b) return true;
	//~ cout<<a<<" "<<b<<" "<<is(a, b)<<" "<<is(b, a)<<"\n";
	if(is(a, b)){
		int tot = 0;
		for(int j=19;~j;j--){
			if(!is(par[b][j], a)){
				tot += lift[b][j];
				b = par[b][j];
			}
		}
		return (!tot && ed[b] <= t);
	}
	
	if(is(b, a)){
		swap(a, b);
		int tot = 0, o = b;
		for(int j=19;~j;j--){
			if(!is(par[b][j], a)){
				tot += lift[b][j];
				b = par[b][j];
			}
		}
		//~ cout<<tot<<" "<<d[o] - d[b]<<" "<<ed[o]<<"\n";
		return (tot == d[o] - d[b] && ed[o] <= t);
	}
	
	int t1 = 0, t2 = 0, o = a;
	for(int j=19;~j;j--){
		if(!is(par[b][j], a)){
			t1 += lift[b][j];
			b = par[b][j];
		}
		
		if(!is(par[a][j], b)){
			t2 += lift[a][j];
			a = par[a][j];
		}
	}
	//~ cout<<a<<" "<<b<<"\n";
	//~ cout<<t1<<" "<<t2<<" "<<d[a] - d[o]<<" "<<ed[a]<<" "<<ed[b]<<" "<<ed[o]<<"\n";
	return (t1 == 0 && t2 == d[o] - d[a] && ed[a] > ed[b] && ed[o] <= t);
}

signed main(){
	ios::sync_with_stdio(0); cin.tie(0);
	
	int n, m; cin>>n>>m;
	vector<ar<int, 3>> q;
	for(int i=1;i<n + m;i++){
		char c; cin>>c;
		if(c == 'S'){
			int a, b; cin>>a>>b;
			edges[a].push_back({b, i});
			edges[b].push_back({a, i});
		} if(c == 'Q') {
			int a, b; cin>>a>>b;
			q.push_back({a, b, i});
		} if(c == 'C'){
			assert(false);
		}
	}
	
	par[1][0] = 1;
	dfs(1);
	
	for(auto [a, b, t] : q){
		if(check(a, b, t)) cout<<"yes\n";
		else cout<<"no\n";
	}
}

/*

6 3
S 1 2
S 1 3
S 3 4
Q 5 1
S 4 5
S 1 6
Q 5 1
Q 1 5

5 1
S 5 4
S 4 1
S 1 2
S 2 3
Q 3 5

*/
# 결과 실행 시간 메모리 Grader output
1 Correct 29 ms 6844 KB Output is correct
2 Correct 40 ms 9036 KB Output is correct
3 Correct 38 ms 9060 KB Output is correct
4 Correct 51 ms 9084 KB Output is correct
5 Correct 50 ms 9468 KB Output is correct
6 Correct 38 ms 9004 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 29 ms 6844 KB Output is correct
2 Correct 40 ms 9036 KB Output is correct
3 Correct 38 ms 9060 KB Output is correct
4 Correct 51 ms 9084 KB Output is correct
5 Correct 50 ms 9468 KB Output is correct
6 Correct 38 ms 9004 KB Output is correct
7 Runtime error 10 ms 10196 KB Execution killed with signal 6
8 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 28 ms 6856 KB Output is correct
2 Correct 127 ms 35156 KB Output is correct
3 Correct 141 ms 35004 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 28 ms 6856 KB Output is correct
2 Correct 127 ms 35156 KB Output is correct
3 Correct 141 ms 35004 KB Output is correct
4 Runtime error 8 ms 10196 KB Execution killed with signal 6
5 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 31 ms 6888 KB Output is correct
2 Correct 138 ms 43928 KB Output is correct
3 Correct 141 ms 43916 KB Output is correct
4 Correct 143 ms 43872 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 31 ms 6888 KB Output is correct
2 Correct 138 ms 43928 KB Output is correct
3 Correct 141 ms 43916 KB Output is correct
4 Correct 143 ms 43872 KB Output is correct
5 Runtime error 8 ms 10300 KB Execution killed with signal 6
6 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 39 ms 6848 KB Output is correct
2 Correct 120 ms 35380 KB Output is correct
3 Correct 139 ms 35924 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 39 ms 6848 KB Output is correct
2 Correct 120 ms 35380 KB Output is correct
3 Correct 139 ms 35924 KB Output is correct
4 Runtime error 8 ms 10196 KB Execution killed with signal 6
5 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 29 ms 6880 KB Output is correct
2 Correct 132 ms 43940 KB Output is correct
3 Correct 149 ms 44048 KB Output is correct
4 Correct 167 ms 43912 KB Output is correct
5 Correct 30 ms 7744 KB Output is correct
6 Correct 116 ms 35456 KB Output is correct
7 Correct 144 ms 36108 KB Output is correct
8 Correct 172 ms 36352 KB Output is correct
9 Correct 154 ms 36352 KB Output is correct
10 Correct 178 ms 40880 KB Output is correct
11 Correct 214 ms 40180 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 29 ms 6880 KB Output is correct
2 Correct 132 ms 43940 KB Output is correct
3 Correct 149 ms 44048 KB Output is correct
4 Correct 167 ms 43912 KB Output is correct
5 Correct 30 ms 7744 KB Output is correct
6 Correct 116 ms 35456 KB Output is correct
7 Correct 144 ms 36108 KB Output is correct
8 Correct 172 ms 36352 KB Output is correct
9 Correct 154 ms 36352 KB Output is correct
10 Correct 178 ms 40880 KB Output is correct
11 Correct 214 ms 40180 KB Output is correct
12 Runtime error 7 ms 10196 KB Execution killed with signal 6
13 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 31 ms 6864 KB Output is correct
2 Correct 43 ms 8928 KB Output is correct
3 Correct 42 ms 9064 KB Output is correct
4 Correct 55 ms 9104 KB Output is correct
5 Correct 45 ms 9472 KB Output is correct
6 Correct 37 ms 9176 KB Output is correct
7 Correct 29 ms 7868 KB Output is correct
8 Correct 138 ms 34980 KB Output is correct
9 Correct 118 ms 35012 KB Output is correct
10 Correct 28 ms 7840 KB Output is correct
11 Correct 145 ms 43908 KB Output is correct
12 Correct 141 ms 44032 KB Output is correct
13 Correct 155 ms 43844 KB Output is correct
14 Correct 33 ms 7816 KB Output is correct
15 Correct 118 ms 35448 KB Output is correct
16 Correct 118 ms 35968 KB Output is correct
17 Correct 166 ms 36288 KB Output is correct
18 Correct 151 ms 36352 KB Output is correct
19 Correct 166 ms 40888 KB Output is correct
20 Correct 249 ms 40144 KB Output is correct
21 Correct 124 ms 35544 KB Output is correct
22 Correct 130 ms 35624 KB Output is correct
23 Correct 172 ms 35804 KB Output is correct
24 Correct 138 ms 35964 KB Output is correct
25 Correct 158 ms 37748 KB Output is correct
26 Correct 138 ms 35392 KB Output is correct
27 Correct 127 ms 35536 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 31 ms 6864 KB Output is correct
2 Correct 43 ms 8928 KB Output is correct
3 Correct 42 ms 9064 KB Output is correct
4 Correct 55 ms 9104 KB Output is correct
5 Correct 45 ms 9472 KB Output is correct
6 Correct 37 ms 9176 KB Output is correct
7 Correct 29 ms 7868 KB Output is correct
8 Correct 138 ms 34980 KB Output is correct
9 Correct 118 ms 35012 KB Output is correct
10 Correct 28 ms 7840 KB Output is correct
11 Correct 145 ms 43908 KB Output is correct
12 Correct 141 ms 44032 KB Output is correct
13 Correct 155 ms 43844 KB Output is correct
14 Correct 33 ms 7816 KB Output is correct
15 Correct 118 ms 35448 KB Output is correct
16 Correct 118 ms 35968 KB Output is correct
17 Correct 166 ms 36288 KB Output is correct
18 Correct 151 ms 36352 KB Output is correct
19 Correct 166 ms 40888 KB Output is correct
20 Correct 249 ms 40144 KB Output is correct
21 Correct 124 ms 35544 KB Output is correct
22 Correct 130 ms 35624 KB Output is correct
23 Correct 172 ms 35804 KB Output is correct
24 Correct 138 ms 35964 KB Output is correct
25 Correct 158 ms 37748 KB Output is correct
26 Correct 138 ms 35392 KB Output is correct
27 Correct 127 ms 35536 KB Output is correct
28 Runtime error 8 ms 10280 KB Execution killed with signal 6
29 Halted 0 ms 0 KB -