Submission

Status:

(PPPPPPPPP)(PPPP)(PPTSSS)(SSSSSSSSSS)

Subtask/Task Score:

{25/25}{25/25}{0/20}{0/30}

Score: 50

User: navysrimuang

Problemset: เดินทางข้ามชุมชน

Language: cpp

Time: 1.094 second

Submitted On: 2026-03-19 15:13:40

#include<bits/stdc++.h>
using namespace std;
using ll = long long;

int ss,ee; ll k;
vector<vector<pair<ll,int>>> adj;

bool dfs(int u,int t,int p){
	if(u == t) return 1;
	for(auto [w,v] : adj[u]){
			if(v == p || w  > k) continue;
			bool rs = dfs(v,t,u);
			if(rs != 0) return rs;	
	}

	return 0;
}
struct DSU{
	vector<int> par,sz;	
	DSU(int n){
		par.resize(n); sz.resize(n,1);
		iota(par.begin(),par.end(),0);
	}

	int find(int x){
		if(par[x] == x) return x;
		else return par[x] = find(par[x]);
	}

	bool unite(int a,int b){
		int ra = find(a);
		int rb = find(b);
		if(ra == rb) return 0;

		if(sz[ra] < sz[rb]) swap(ra,rb);
		par[rb] = ra;
		sz[ra] += sz[rb];
		return 1;
	}
};

int main(){

	cin.tie(0)->sync_with_stdio(0);
	int n,m,q;
	cin >> n >> m >> q;
	vector<tuple<ll,int,int>> edges;
	for(int i = 0;i<m;i++){
		int a,b;
		ll c;
		cin >> a >> b >> c;
		edges.push_back({c,a,b});
	}	
	sort(edges.begin(),edges.end());	

	DSU dsu(n);
	adj.resize(n);
	int cmp = 0;

	for(auto [w,a,b] : edges){
		if(dsu.unite(a,b)){
			adj[a].push_back({w,b});
			adj[b].push_back({w,a});
			cmp++;
		}
		if(cmp == n-1) break;
	}

	while(q--){
		cin >> ss >> ee >> k;
		if(dfs(ss,ee,-1)) cout << "Yes\n";
		else cout << "No\n";	
	}
	return 0;
}