제출 #1323663

#제출 시각아이디문제언어결과실행 시간메모리
1323663raqin_shahrierDrivers (BOI24_drivers)C++20
0 / 100
1102 ms1114112 KiB
#include<bits/stdc++.h> // #include <ext/pb_ds/assoc_container.hpp> // #include <ext/pb_ds/tree_policy.hpp> using namespace std; // #define ordered_set tree<int, null_type,less<int>, rb_tree_tag,tree_order_statistics_node_update> // using namespace __gnu_pbds; typedef long long ll; #define int long long #define vi vector<int> #define vvi vector<vi> #define vll vector<ll> #define vvll vector<vll> #define pi pair<int,int> #define pll pair<ll,ll> #define ff first #define ss second #define vpi vector<pair<int,int>> #define rep(ii,st, n) for(int ii=st; ii<n; ii++) #define gp " " //bit_manupulation #define checkbit(x,n) (x&(1LL<<n)) #define setbit(x,n) (x=(x|(1LL<<n))) #define resetbit(x,n) (x=(x&(~(1LL<<n)))) #define pow2(i) (1LL<<i) #define bitcnt(x) ((sizeof(x) <= sizeof(int)) ? (32 - __builtin_clz(x)) : (64 - __builtin_clzll(x))) // #define DEBG #define debug(n) #define debugc(a) #define debugcc(a) #ifdef DEBG #define debug(n) cout<<__LINE__<<gp<<#n<<gp<<n<<endl; #define debugc(a) cout<<__LINE__<<gp<<#a<<gp<<'['<<gp;for(auto el:a){cout<<el<<gp;}cout<<']'<<endl; #define debugcc(a) cout<<__LINE__<<gp<<#a<<gp<<'['<<gp;for(auto el:a){cout<<'{'<<gp<<el.ff<<','<<el.ss<<gp<<'}'<<gp;}cout<<']'<<endl; #endif #define fastcin() ios_base::sync_with_stdio(false); cin.tie(NULL); #define endl '\n' #define All(a) a.begin(),a.end() template<typename T> void get_vector(T&a){for(auto&e:a)cin>>e;} template<typename T> void put_vector(T a){for(auto e:a)cout<<e<<" ";cout<<endl;} const ll INF = 2e18; const ll inf = INT_MAX; const ll M = 1e9 + 7; const ll N = 2e5 + 7; const ll modinvof2 = 500000004; //==============================CODE STARTS HERE==============================// vector<vector<pair<int,int>>>g; const int MAXN = 200005; const int LOG = 20; int up[MAXN][LOG]; int mx[MAXN][LOG]; int depth[MAXN]; // Preprocessing: DFS to fill depths and the first jump (2^0) void dfs(int u, int p, int w, int d) { depth[u] = d; up[u][0] = p; mx[u][0] = w; for (int i = 1; i < LOG; i++) { up[u][i] = up[up[u][i - 1]][i - 1]; mx[u][i] = max(mx[u][i - 1], mx[up[u][i - 1]][i - 1]); } for (auto& edge : g[u]) { if (edge.ff != p) { dfs(edge.ff, u, edge.ss, d + 1); } } } int query_max(int u, int v) { if (depth[u] < depth[v]) swap(u, v); int res = 0; // 1. Lift u to the same depth as v for (int i = LOG - 1; i >= 0; i--) { if (depth[u] - (1 << i) >= depth[v]) { res = max(res, mx[u][i]); u = up[u][i]; } } if (u == v) return res; // 2. Lift both until they are just below the LCA for (int i = LOG - 1; i >= 0; i--) { if (up[u][i] != up[v][i]) { res = max({res, mx[u][i], mx[v][i]}); u = up[u][i]; v = up[v][i]; } } // 3. Final jump to the LCA res = max({res, mx[u][0], mx[v][0]}); return res; } vector<bool>visited; map<int,int>mp; vector<int>current_cc; void dfs2(int vertex){ if(visited[vertex]){ return; } visited[vertex] = true; current_cc.push_back(vertex); for(auto child: g[vertex]){ dfs2(child.ff); } } void preprocessing(){ } void solve(int testcases){ int n,m,q; cin>>n>>m>>q; g.resize(n+7); visited.resize(n+7); for(int i = 0; i<m; i++){ int x,y,w; cin>>x>>y>>w; g[x].push_back({y,w}); g[y].push_back({x,w}); } int lvl = 1; for(int i = 1; i<=n; i++){ if(visited[i]){ continue; } dfs2(i); // connected_components.push_back(current_cc); for(auto& el: current_cc){ mp[el] = lvl; } int a = *current_cc.begin(); dfs(a,a,0,0); lvl++; current_cc.clear(); } // exit(0); while(q--){ int a,b,p; cin>>a>>b>>p; if(mp[a] != mp[b]){ cout<<"NE\n"; continue; } int ans = query_max(a,b); debug(ans) if(ans<p){ cout<<"TAIP\n"; continue; } cout<<"NE\n"; } } int32_t main(){ fastcin(); int t=1; // cin>>t; preprocessing(); rep(i,1,t+1){ solve(i); } 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...