제출 #449497

#제출 시각아이디문제언어결과실행 시간메모리
449497ritul_kr_singhTraffic (CEOI11_tra)C++17
100 / 100
1122 ms53024 KiB
#include <bits/stdc++.h>
using namespace std;
#define sp << ' ' <<
#define nl << '\n'

const int LIM = 3e5+1;

int n, m, A, id[LIM], L[LIM], R[LIM], pre[LIM], st[LIM], stP, c;
vector<int> g[LIM], h[LIM];
array<int, 3> p[LIM];
bool vis[LIM];

void dfs0(int u){
	vis[u] = 1;
	for(int &v : g[u]) if(!vis[v]) dfs0(v);
	st[stP++] = u;
}

void dfs1(int u){
	id[u] = c + 1;
	for(int &v : h[u]) if(!id[v]) dfs1(v);
}

signed main(){
	cin.tie(0)->sync_with_stdio(0);
	cin >> n >> m >> A >> c;

	fill(L, L+n+1, n+1);

	for(int i=0; i<n; ++i){
		auto &[x, y, j] = p[i];
		cin >> x >> y;
		j = i;
	}

	for(int i=0; i<m; ++i){
		int u, v, w;
		cin >> u >> v >> w; --u, --v;
		while(w--){
			g[u].push_back(v);
			h[v].push_back(u);
			swap(u, v);
		}
	}

	for(int u=0; u<n; ++u) if(!vis[u] && !p[u][0]) dfs0(u);

	sort(p, p+n, [&](auto &x, auto &y){
		return x[1] < y[1];
	});
	
	for(int i=0; i<n; ++i){
		auto &[x, y, j] = p[i];
		if(x == A) L[j+1] = R[j+1] = i+1;
	}

	for(int i=stP; --i>=0; )
		if(!id[st[i]]) dfs1(c = st[i]);

	for(int i=0; i<stP; ++i){
		int u = st[i];
		L[id[u]] = min(L[id[u]], L[u+1]);
		R[id[u]] = max(R[id[u]], R[u+1]);
		for(int &v : g[u]){
			L[id[u]] = min(L[id[u]], L[id[v]]);
			R[id[u]] = max(R[id[u]], R[id[v]]);
		}
	}

	for(int i=0; i<n; ++i)
		pre[i+1] = pre[i] + (vis[p[i][2]] && p[i][0] == A);

	for(int i=n; --i>=0; ){
		int j = id[p[i][2]];
		if(!p[i][0])
			cout << (R[j] ? pre[R[j]] - pre[L[j]-1] : 0) nl;
	}
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...