제출 #1232279

#제출 시각아이디문제언어결과실행 시간메모리
1232279ThommyDBDrivers (BOI24_drivers)C++20
100 / 100
338 ms21552 KiB
#include<bits/stdc++.h> using namespace std; #define int long long const int INF = 1e16; int n, m, u; vector<pair<int, pair<int, int>>> edges; vector<int> p, siz; int find(int x){ int xx = x; while(p[x]!=x) x=p[x]; p[xx]=x; return x; } void unite(int a, int b){ a=find(a); b=find(b); if(siz[a]>siz[b])swap(a, b); siz[a]+=siz[b]; p[b]=a; } bool same(int a, int b){ return find(a)==find(b); } signed main(){ cin >> n >> m >> u; edges.resize(m); p.resize(n); iota(p.begin(), p.end(), 0); siz.resize(n, 1); for(int i = 0; i < m; i++){ int a, b, t; cin >> a >> b >> t; a--; b--; edges[i]={t, {a, b}}; } sort(edges.begin(), edges.end()); edges.push_back({INF, {-1, -1}}); vector<pair<pair<int, int>, pair<int, int>>> queries(u); for(int i = 0; i < u; i++){ int p, a, b; cin >> a >> b >> p; a--; b--; queries[i]={{p, i}, {a, b}}; } sort(queries.begin(), queries.end()); vector<string> ans(u); int road = 0; for(int i = 0; i < u; i++){ int p = queries[i].first.first, a=queries[i].second.first, b=queries[i].second.second; while(edges[road].first <= p){ unite(edges[road].second.first, edges[road].second.second); road++; } if(same(a, b)) ans[queries[i].first.second]="TAIP"; else ans[queries[i].first.second]="NE"; } for(auto u : ans){ cout << u << "\n"; } }
#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...