제출 #1257442

#제출 시각아이디문제언어결과실행 시간메모리
1257442TINDrivers (BOI24_drivers)C++17
100 / 100
137 ms28020 KiB
#include <bits/stdc++.h>

using namespace std;

int main(void) {
	ios_base::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);
	int N, M, Q;
	cin >> N >> M >> Q;
	vector<pair<int,pair<int,int>>> edges;
	for (int i = 0; i < M; i++) {
		int u, v, t;
		cin >> u >> v >> t;
		--u, --v;
		edges.push_back({t, {u, v}});
	}
	vector<pair<pair<int,int>,int>> actual_queries(Q);
	for (int i = 0; i < Q; i++) {
		int a, b, p;
		cin >> a >> b >> p;
		--a, --b;
		actual_queries[i] = {{a, b}, p};
	}
	int maxT = 0;
	vector<vector<int>> e_id;
	vector<vector<int>> q_id;
	{
		vector<int> vec;
		for (int i = 0; i < M; i++) vec.push_back(edges[i].first);
		for (int i = 0; i < Q; i++) vec.push_back(actual_queries[i].second);
		sort(vec.begin(), vec.end());
		vec.resize(unique(vec.begin(), vec.end()) - vec.begin());
		maxT = (int) vec.size();
		e_id.resize(maxT);
		q_id.resize(maxT);
		for (int i = 0; i < M; i++) {
			int eid = lower_bound(vec.begin(), vec.end(), edges[i].first) - vec.begin();
			e_id[eid].push_back(i);
		}
		for (int i = 0; i < Q; i++) {
			int qid = lower_bound(vec.begin(), vec.end(), actual_queries[i].second) - vec.begin();
			q_id[qid].push_back(i);
		}
	}
	vector<int> par(N), sz(N);
	for (int i = 0; i < N; i++) par[i] = i, sz[i] = 1;
	function<int(int)> find_set;
	find_set = [&](int u) -> int {
		if (par[u] == u) return u;
		return par[u] = find_set(par[u]);
	};
	auto union_set = [&](int u, int v) -> void {
		u = find_set(u);
		v = find_set(v);
		if (u == v) return;
		if (sz[u] < sz[v]) swap(u, v);
		sz[u] += sz[v];
		par[v] = u;
		return;
	};
	vector<bool> ans(Q);
	for (int t = 0; t < maxT; t++) {
		for (int eid : e_id[t]) union_set(edges[eid].second.first, edges[eid].second.second);
		for (int qid : q_id[t]) ans[qid] = (find_set(actual_queries[qid].first.first) == find_set(actual_queries[qid].first.second));
	}
	for (int i = 0; i < Q; i++) cout << (ans[i] ? "TAIP" : "NE") << '\n';
	return 0;
}
#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...