Submission #124995

#TimeUsernameProblemLanguageResultExecution timeMemory
124995streifiSightseeing (NOI14_sightseeing)C++14
25 / 25
2739 ms104564 KiB
#include <bits/stdc++.h> using namespace std; const int INF = 0x3f3f3f3f; const int MAX_V = 500005; struct adj_edge { int v, w; }; struct list_edge { int u, v, w; bool operator<(const list_edge &other) const { return w < other.w; } }; int V, E, Q; vector< vector<adj_edge> > adj; vector<list_edge> edge_list; int par[MAX_V], dist[MAX_V]; int find(int u) { if (par[u] == u) return u; return par[u] = find(par[u]); } void merge(int u, int v) { int ru = find(u), rv = find(v); if (ru == rv) return; if (rand()%2) swap(ru, rv); par[ru] = rv; } void kruskall() { for (int i = 0; i < V; ++i) par[i] = i; sort(edge_list.rbegin(), edge_list.rend()); for (list_edge e: edge_list) { if (find(e.u) == find(e.v)) continue; merge(e.u, e.v); adj[e.u].push_back({e.v, e.w}); adj[e.v].push_back({e.u, e.w}); } } void dfs(int cur, int curmin) { if (dist[cur] != -1) return; dist[cur] = curmin; for (adj_edge e: adj[cur]) { dfs(e.v, min(curmin, e.w)); } } signed main() { ios::sync_with_stdio(0); cin.tie(0); cin >> V >> E >> Q; adj.resize(V); edge_list.resize(E); for (int e = 0; e < E; ++e) { int u, v, q; cin >> u >> v >> q; edge_list[e] = list_edge{u-1, v-1, q}; } kruskall(); for (int i = 0; i < V; ++i) { dist[i] = -1; } dfs(0, INF); for (int q = 0; q < Q; ++q) { int X; cin >> X; cout << dist[X-1] << "\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...