제출 #330104

#제출 시각아이디문제언어결과실행 시간메모리
330104ignaciocanta관광 (NOI14_sightseeing)C++14
25 / 25
2349 ms202704 KiB
#include <bits/stdc++.h> using namespace std; using tint = long long; using ld = long double; #define forsn(i, s, n) for(int i = s; i < int(n); i++) #define forn(i, n) forsn(i, 0, n) #define trav(a, x) for(auto& a : x) using vi = vector<int>; using vl = vector<tint>; using vb = vector<bool>; #define pb push_back #define pf push_front #define rsz resize #define all(x) begin(x), end(x) #define rall(x) x.rbegin(), x.rend() #define sz(x) (int)(x).size() #define ins insert #define esta(x,c) ((c).find(x) != (c).end()) using pi = pair<int,int>; using pl = pair<tint,tint>; #define f first #define s second #define mp make_pair #define DBG(x) cerr << #x << " = " << x << endl; const int MOD = 1e9+7; const tint mod = 998244353; const int MX = 5e5+5; const tint INF = 1e18; const int inf = 2e9; const ld PI = acos(ld(-1)); const ld eps = 1e-8; const int dx[4] = {1, -1, 0, 0}; const int dy[4] = {0, 0, 1, -1}; template<class T> void remDup(vector<T> &v){ sort(all(v)); v.erase(unique(all(v)),end(v)); } template<class T> bool valid(T x, T y, T n, T m){ return (0<=x && x<n && 0<=y && y<m); } tint cdiv(tint a, tint b) { return a/b+((a^b)>0&&a%b); } //redondea p arriba int fdiv(int a, int b) { return a/b-((a^b)<0&&a%b); } //redonde p abajo void NACHO(string name = "cbarn"){ ios_base::sync_with_stdio(0); cin.tie(0); //freopen((name+".in").c_str(), "r", stdin); //freopen((name+".out").c_str(), "w", stdout); } struct edge{ int u, v, w; bool operator<(const edge &a)const{ return w > a.w; } }; vector<pi> tree[MX]; int pa[MX]; int tam[MX]; int ret[MX]; void dfs(int node, int pa){ trav(u, tree[node]){ if(u.f != pa){ ret[u.f] = min(ret[node], u.s); dfs(u.f, node); } } } void init(int n){ forn(i, n) pa[i] = i, tam[i] = 1; } int find(int a){ if(a == pa[a]) return a; return pa[a] = find(pa[a]); } void unite(int a, int b){ a = find(a), b = find(b); if(a != b){ if(tam[a] < tam[b]) swap(a, b); pa[b] = a; tam[a]+=tam[b]; } } int main(){ NACHO(); int n, m, q; cin >> n >> m >> q; vector<edge> edges (m); init(n); forn(i, m){ int u, v, w; cin >> u >> v >> w; --u, --v; edges[i] = {u, v, w}; } sort(all(edges)); forn(i, m){ int u = edges[i].u, v = edges[i].v, w = edges[i].w; if(find(u) != find(v)){ unite(u, v); tree[u].pb(mp(v, w)); tree[v].pb(mp(u, w)); } } ret[0] = inf; dfs(0, -1); forn(assa, q){ int x; cin >> x; --x; if(x == 0) cout << 0 << "\n"; else cout << ret[x] << "\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...