Submission
Status:
(PPPPPPPPP)(PPPP)(PPTSSS)(SSSSSSSSSS)
Subtask/Task Score:
{25/25}{25/25}{0/20}{0/30}
Score: 50
User: SparkPun
Problemset: เดินทางข้ามชุมชน
Language: cpp
Time: 1.097 second
Submitted On: 2026-03-22 16:52:55
#include <bits/stdc++.h>
using namespace std;
const int N=1e5+10;
vector<tuple<int,int,int>>edge;
int parent[N],sz[N];
bool cmp(const tuple<int,int,int>&a,const tuple<int,int,int>&b){
return get<2>(a)<get<2>(b);
}
int findSet(int u){
if(parent[u]==u) return u;
return parent[u]=findSet(parent[u]);
}
void unionSet(int u,int v){
int U=findSet(u),V=findSet(v);
if(U!=V){
if(sz[U]<=sz[V]){
parent[V]=U;
sz[U]+=sz[V];
}
else{
parent[U]=V;
sz[V]+=sz[U];
}
}
}
int main(){
ios_base::sync_with_stdio(0),cin.tie(0);
int n,m,q;
cin >> n >> m >> q;
while(m--){
int u,v,w;
cin >> u >> v >> w;
edge.push_back({u,v,w});
}
sort(edge.begin(),edge.end(),cmp);
while(q--){
int a,b,k;
cin >> a >> b >> k;
for(int i=0;i<=n;i++){
parent[i]=i;
sz[i]=1;
}
for(auto [u,v,w]:edge){
if(findSet(u)!=findSet(v) && w<=k){
unionSet(u,v);
}
}
if(findSet(a)==findSet(b)) cout << "Yes" << endl;
else cout << "No" << endl;
}
}