Submission #1302204

#TimeUsernameProblemLanguageResultExecution timeMemory
1302204damasenDrivers (BOI24_drivers)C++20
55 / 100
2096 ms28400 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define all(x) x.begin(), x.end() #define pb push_back #define sz(x) (int)x.size() const int INF = 1e18; vector<int> parent, sizes; vector<array<int, 3>> edges, good; int find(int u){ if(parent[u] == u) return u; return parent[u] = find(parent[u]); } void unite(int v, int u, int w){ v = find(v); u = find(u); if(v != u){ if(sizes[u] < sizes[v]) swap(u, v); parent[v] = u; sizes[u] += sizes[v]; good.pb({v, u, w}); } } vector<vector<pair<int, int>>> adj; vector<int> vis; int the; void dfs(int node, int b, int cur){ if(vis[node] || the != -1) return; vis[node] = 1; if(node == b){ the = cur; return; } for(auto go : adj[node]){ if(!vis[go.first]) dfs(go.first, b, max(cur, go.second)); } } void solve(){ int n, m, u; cin >> n >> m >> u; edges.clear(); good.clear(); parent.resize(n + 1); sizes.assign(n + 1, 1); for(int i = 0; i <= n; i++) parent[i] = i; // read edges while(m--){ int x, y, w; cin >> x >> y >> w; edges.pb({w, x, y}); } // sort edges by weight sort(all(edges)); // check subtask 1 condition (all weights equal) bool same = true; for(int i = 1; i < sz(edges); i++){ if(edges[i][0] != edges[0][0]){ same = false; break; } } // build DSU / MST for(auto e : edges){ unite(e[1], e[2], e[0]); } // subtask 1 solution if(same){ while(u--){ int a, b, t; cin >> a >> b >> t; if(find(a) == find(b) && edges[0][0] <= t) cout << "TAIP\n"; else cout << "NE\n"; } return; } // build MST adjacency list adj.assign(n + 1, {}); for(auto e : good){ adj[e[0]].pb({e[1], e[2]}); adj[e[1]].pb({e[0], e[2]}); } vis.assign(n + 1, 0); // general (slow) solution while(u--){ int a, b, t; cin >> a >> b >> t; fill(vis.begin(), vis.end(), 0); the = -1; dfs(a, b, 0); if(the == -1 || the > t) cout << "NE\n"; else cout << "TAIP\n"; } } int32_t main(){ ios::sync_with_stdio(0); cin.tie(0); solve(); 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...