Submission #1249325

#TimeUsernameProblemLanguageResultExecution timeMemory
1249325amanthabandDrivers (BOI24_drivers)C++20
100 / 100
356 ms17624 KiB
#include <bits/stdc++.h> #include <tuple> using namespace std; #define fastio ios::sync_with_stdio(false); cin.tie(NULL); #define pb push_back #define mp make_pair #define fi first #define se second #define all(x) (x).begin(), (x).end() #define rall(x) (x).rbegin(), (x).rend() #define sz(x) ((int)(x).size()) #define rep(i,a,b) for(int i = a; i < b; ++i) #define rrep(i,a,b) for(int i = a; i >= b; --i) typedef long long ll; typedef unsigned long long ull; typedef long double ld; typedef vector<ll> vi; typedef vector<ll> vll; typedef pair<int,int> pii; typedef pair<ll,ll> pll; typedef vector<pii> vpii; typedef vector<pll> vpll; typedef vector<vi> vvi; typedef vector<vll> vvll; const ll INF = 1e9+5; const ll LINF = 1e18; const int MOD = 1e9+7; const int MOD2 = 998244353; template<typename T> using minpq = priority_queue<T, vector<T>, greater<T>>; template<typename T> using maxpq = priority_queue<T>; struct DSU { vi p, sz, mn; void init(int n) { p.resize(n); sz.assign(n, 1); mn.resize(n); iota(all(p), 0); iota(all(mn), 0); } int find(int x) { return x == p[x] ? x : p[x] = find(p[x]); } bool same(int x, int y) { return find(x) == find(y); } int size(int x) { return sz[find(x)]; } int get_min(int x) { return mn[find(x)]; } bool join(int x, int y) { x = find(x); y = find(y); if (x == y) return false; if (sz[x] < sz[y]) swap(x, y); p[y] = x; sz[x] += sz[y]; mn[x] = min(mn[x], mn[y]); return true; } }; int main() { DSU dsu; int n,m,u; cin>>n>>m>>u; vector<tuple<int, int, int>> v(m); for(int i = 0; i < m; i++) { int x,y,t; cin>>x>>y>>t; v[i] = make_tuple(t,x,y); } sort(all(v)); vector<tuple<int,int,int,int>> uv(u); for(int i = 0; i < u; i++) { int a,b,p; cin>>a>>b>>p; uv[i] = make_tuple(p,a,b,i); } sort(all(uv)); int ro = 0; vector<string> ans(u); dsu.init(n+1); for (auto [p,a,b,i] : uv) { while (ro < m) { int t,x,y; tie(t,x,y) = v[ro]; if (t > p) break; dsu.join(x,y); ro++; } ans[i] = dsu.same(a,b) ? "TAIP" : "NE"; } for(int i = 0; i < ans.size(); i++) { cout<<ans[i]<<endl; } return 0; }
#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...