Submission #1206971

#TimeUsernameProblemLanguageResultExecution timeMemory
1206971dksnfjkfnwkfwDrivers (BOI24_drivers)C++20
100 / 100
213 ms13672 KiB
#include <bits/stdc++.h> using namespace std; #define sonic ios_base::sync_with_stdio(false);cin.tie(0); cout.tie(0) #define IO(main) if(fopen(main".inp","r")){freopen(main".inp","r",stdin);freopen(main".out","w",stdout);} #define pb push_back #define fi first #define se second #define mp make_pair #define ins insert #define pb push_back #define el cout << endl #define SZ(x) ((int)(x).size()) #define ALL(x) (x).begin(), (x).end() #define MASK(i) ((1LL)<<(i)) #define BIT(x,i) (((x)>>(i))&(1LL)) #define FOR(i, a, b) for(int (i)=(a);(i)<=(b); i++) #define FORD(i, a, b) for(int (i)=(a);(i)>=(b); i--) using ll = long long; using ull = unsigned long long; using ld = long double; using pii = pair<int, int>; using pll = pair<ll, ll>; using vi = vector<int>; using vii = vector<pii>; const int N = 2e5 + 9; const int mod = 1e9 + 7; const ll INF = 1e18 + 7; const int base = 31; const int LOG = 20; const ll MOD = 1e9 + 7; int mul(int x, int y) {return 1LL * x * y % mod;} int calPw(int x, int y) { int ans = 1; while(y) { if (y&1) ans = 1LL * ans * x % mod; x = 1LL * x * x % mod; y >>= 1; } return ans; } int d4x[4] = {1, 0, -1, 0}; int d4y[4] = {0, 1, 0, -1}; int dx[8] = {0, 1, 1, 1, 0, -1, -1, -1}; int dy[8] = {1, 1, 0, -1, -1, -1, 0, 1}; ///Author: Le Chi Thien Luong The Vinh high school 2008 ///code template<class X, class Y> bool minimize(X &x , Y y){ if(x > y){ x = y; return true; } return false; } template<class X, class Y> bool maximize(X &x , Y y){ if(x < y){ x = y; return true; } return false; } template<class X, class Y> bool add(X &x , Y y){ if((x + y ) >= mod){ ll tmp = x + y; x = tmp - mod; return true; } return false; } void Solve(){ } struct edge{ int u, v, w; bool operator<(const edge& a) const { return w < a.w; } }e[N]; struct query { int u, v, w, id; bool operator<(const query& a) const { return w < a.w; } }qr[N]; int n, m, q; int lab[N]; int Find(int u){ if(lab[u] < 0)return u; lab[u] = Find(lab[u]); return lab[u]; } bool dsu(int u, int v){ u = Find(u); v = Find(v); if(u == v)return false; if(lab[u] > lab[v])swap(u, v); lab[u] += lab[v]; lab[v] = u; return true; } bool check(int u, int v, int w){ FOR(i, 1, n)lab[i] = -1; FOR(i, 1, m){ if(e[i].w <= w){ dsu(e[i].u, e[i].v); } } return (Find(u) == Find(v)); } string ans[N]; void Read(){ cin >> n >> m >> q; int ok = 1; FOR(i, 1, m){ int u, v, w; cin >> u >> v >> w; e[i] = {u, v, w}; if(i >= 2){ if(e[i].w != e[i - 1].w)ok = 0; } } FOR(i, 1, n)lab[i] = -1; FOR(i, 1, q){ int u, v, w; cin >> u >> v >> w; qr[i] = {u, v, w, i}; } sort(qr + 1, qr + 1 + q); sort(e + 1, e + 1 + m); int p = 1; FOR(i, 1, q){ int w = qr[i].w; int l = 1, r = m; int pos = -1; while(l <= r){ int mid = l + r >> 1; if(e[mid].w <=w){ l = mid + 1; pos = mid; } else r = mid - 1;; } ///cout << p << " " << pos << " " << w << endl; if(p <= pos) FOR(j, p, pos){ dsu(e[j].u, e[j].v); } p = max(p, pos); if(Find(qr[i].u) == Find(qr[i].v)){ ans[qr[i].id] = "TAIP"; } else ans[qr[i].id] = "NE"; } FOR(i, 1, q)cout << ans[i] << endl; } int main() { sonic; int TEST = 1; // cin >> TEST; while(TEST--) { Read(); Solve(); } }
#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...