Submission
Status:
(-SSSSSSSS)(SSSS)(-SSSSS)(SSSSSSSSSS)
Subtask/Task Score:
{0/25}{0/25}{0/20}{0/30}
Score: 0
User: C12
Problemset: เดินทางข้ามชุมชน
Language: cpp
Time: 0.002 second
Submitted On: 2026-01-04 22:13:34
#include <bits/stdc++.h>
using namespace std;
#define f first
#define s second
#define pii pair<ll,ll>
#define puii pair<ull,ull>
#define piii pair<ll,pii>
#define ll long long
#define ull unsigned long long
#define mp make_pair
#define mpiii(a,b,c) make_pair(a,make_pair(b,c));
// ll mod = 1000000007;
ll n,m,q;
ll a,b,k;
unordered_map<ll,unordered_map<ll,ll>> adj_matrix;
map<ll,vector<ll>> adj_list;
void solving(){
}
void solve(){
cin >> n >> m >> q;
for(int i = 0;i < m;i++){
cin >> a >> b >> k;
adj_matrix[a][a] = 0;
adj_matrix[b][b] = 0;
adj_matrix[a][b] = k;
adj_matrix[b][a] = k;
if(adj_list.find(b) == adj_list.end()){
adj_list[b] = vector<ll>();
}
if(adj_list.find(a) == adj_list.end()){
adj_list[a] = vector<ll>();
}
adj_list[b].push_back(a);
adj_list[a].push_back(b);
}
queue<pii>que;
ll t,cost,ncost;
// cout << '\n';
for(int i = 0;i < n;i++){
for(auto x:adj_list[i]){
que.push(mp(x,adj_matrix[x][i]));\
// cout << x << ' ' << i << ' ' << adj_matrix[x][i] << ' ' << adj_matrix[x][i] << '\n';
}
// cout << '\n';
while(!que.empty()){
t = que.front().f;
cost = que.front().s;
que.pop();
for(auto x:adj_list[t]){
if(x == i) continue;
ncost = max(cost,adj_matrix[x][t]);
ncost = max(ncost,adj_matrix[t][x]);
if(adj_matrix[x].find(i) == adj_matrix[x].end()){
adj_matrix[x][i] = LLONG_MAX;
}
if(adj_matrix[i].find(x) == adj_matrix[i].end()){
adj_matrix[i][x] = LLONG_MAX;
}
if(ncost < adj_matrix[x][i] || ncost < adj_matrix[i][x]){
adj_matrix[x][i] = ncost;
adj_matrix[i][x] = ncost;
que.push(mp(x,ncost));
}
// cout << x << ' ' << i << ' ' << ncost << ' ' << adj_matrix[x][i] << '\n';
}
}
// return;
}
// cout << '\n';
for(int i = 0;i < n;i++){
for(int j = 0;j < n;j++){
if(adj_matrix[i].find(j) != adj_matrix[i].end()){
// cout << i << ' ' << j << ' ' << adj_matrix[i][j];
}
else{
// cout << i << ' ' << j << ' ' << "NO";
}
// cout << '\n';
}
}
// return;
while(q--){
cin >> a >> b >> k;
if(adj_matrix[a].find(b) != adj_matrix[a].end() && k >= adj_matrix[a][b]){
cout << "YES";
}
else{
cout << "NO";
}
cout << '\n';
}
return;
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
ll q;
// cin >> q;
// while(q--)
solve();
return 0;
}
/*
6 8 1 4
4 7 6 2 5 3
1
3
6
1
4
6
5
3
*/