Submission #416511

# Submission time Handle Problem Language Result Execution time Memory
416511 2021-06-02T14:10:09 Z Blagojce Inside information (BOI21_servers) C++11
2.5 / 100
372 ms 25672 KB
#include <bits/stdc++.h>
#define fr(i, n, m) for(int i = (n); i < (m); i ++)
#define pb push_back
#define st first
#define nd second
#define pq priority_queue
#define all(x) begin(x), end(x)
  
using namespace std;
typedef long long ll;
typedef long double ld;
typedef pair<int, int> pii;
const ll inf = 1e18;
const int i_inf = 1e9;
const ll mod = 1e9+7;

mt19937 _rand(time(NULL));
const int mxn = 2e5;


int n, k;


vector<pii> g[mxn];
void add_edge(int a, int b, int w){
	g[a].pb({b, w});
	g[b].pb({a, w});
}

vector<pii> Q[mxn];
vector<int> C[mxn];

int qry[2*mxn];


bool deleted[mxn];
int sub[mxn];

int cn;
int mark[mxn];
int id;



int tin[mxn];
int tout[mxn];


void dfs0(int u, int p){
	tin[u] = -1e9;
	tout[u] = 1e9;
	mark[u] = id;
	sub[u] = 1;
	for(auto e : g[u]){
		if(e.st == p || deleted[e.st]) continue;
		dfs0(e.st, u);
		sub[u] += sub[e.st];
	}
}
int dfs1(int u, int p){
	for(auto e : g[u]){
		if(e.st != p && !deleted[e.st] && sub[e.st] > cn/2){
			return dfs1(e.st, u);
		}
	}
	return u;
}

int ans[2*mxn];


int ccen;


void inc(int u, int p, int cw, int mw){
	tin[u] = mw;	
	tout[u] = cw;
	
	for(auto e : g[u]){
		if(e.st != p && !deleted[e.st] && e.nd >= cw){
			inc(e.st, u, e.nd, mw);
		}
	}
}

void dec(int u, int p, int cw, int mw){
	for(auto q : Q[u]){
		if(q.st == ccen){
			if(q.nd >= mw){
				ans[q.nd] = 1;
			}
		}
		else{
			if(mark[q.st] == mark[u] && mw <= tin[q.st] && tout[q.st] <= q.nd){
				ans[q.nd] = 1;
			}
		}
	}
	for(auto e : g[u]){
		if(e.st != p && !deleted[e.st] && e.nd <= cw){
			dec(e.st, u, e.nd, mw);
		}
	}
}


void clr(int u, int p){
	tin[u] = -1e9;
	tout[u] = 1e9;
	for(auto e : g[u]){
		if(e.st == p || deleted[e.st]) continue;
		clr(e.st, u);
	}
}

void decompose(int u, int p){
	++id;
	dfs0(u, u);
	cn = sub[u];
	
	int cen = dfs1(u, u);
	ccen = cen;
	
	for(auto e : g[u]){
		if(deleted[e.st]) continue;
		inc(e.st, cen, e.nd, e.nd);
	}
	for(auto e : g[u]){
		if(deleted[e.st]) continue;
		dec(e.st, cen, e.nd, e.nd);
	}
	
	for(auto q : Q[cen]){
		if(tout[q.st] <= q.nd){
			ans[q.nd] = 1;
		}
	}
	clr(cen, cen);
	deleted[cen] = true;
	for(auto e : g[u]){
		if(deleted[e.st]) continue;
		decompose(e.st, cen);
	}
}



void solve(){
	cin >> n >> k;
	fr(i, 0, n+k-1){
		char t;
		cin >> t;
		if(t == 'S'){
			qry[i] = 0;
			int u, v;
			cin >> u >> v;
			--u, --v;
			add_edge(u, v, i);
		}
		else if(t == 'Q'){
			qry[i] = 1;
			int u, v;
			cin >> u >> v;
			--u, --v;
			if(u == v){
				ans[i] = 1;
			}
			else Q[v].pb({u, i});
		}
		else{
			qry[i] = 2;
			int u;
			cin >> u;
			--u;
			C[u].pb(i);
		}
	}
	decompose(0, -1);
	fr(i, 0, n+k-1){
		if(qry[i] == 0) continue;
		if(qry[i] == 1){
			if(ans[i] == 1) cout<<"yes"<<endl;
			else cout<<"no"<<endl;
		}
		else{
			//cout<<1<<endl;
		}
	}
}

int main(){
	//freopen("in.txt", "r", stdin);
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);
	solve();
	
}
/*
7 2
S 1 2
S 2 4
S 5 2
S 3 7
S 1 3
S 3 6
Q 6 7
Q 7 6
*/
# Verdict Execution time Memory Grader output
1 Incorrect 217 ms 17324 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 217 ms 17324 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 216 ms 17320 KB Output is correct
2 Correct 372 ms 25652 KB Output is correct
3 Correct 369 ms 25672 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 216 ms 17320 KB Output is correct
2 Correct 372 ms 25652 KB Output is correct
3 Correct 369 ms 25672 KB Output is correct
4 Incorrect 203 ms 17268 KB Extra information in the output file
5 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 217 ms 17212 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 217 ms 17212 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 227 ms 17248 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 227 ms 17248 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 212 ms 17152 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 212 ms 17152 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 215 ms 17132 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 215 ms 17132 KB Output isn't correct
2 Halted 0 ms 0 KB -