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;
}