# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
39364 | wzy | Sightseeing (NOI14_sightseeing) | C++11 | 2493 ms | 68236 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
#define F first
#define S second
#define pii pair<int,int>
#define ieps 500500
#define find alice
#define join wonderland
#define eps (int) 1e9
#define mp make_pair
#define pb push_back
int pai[ieps] , n , m , q , peso[ieps] , custo[ieps];
int find(int x){
return pai[x] == x ? x : pai[x] = find(pai[x]);
}
void join(int u , int v){
u = find(u) , v = find(v);
if(peso[u] > peso[v]) swap(u, v);
pai[u] = v , peso[v] += peso[u];
}
struct edges{
int x, y , z;
};
vector<pii> adj[ieps];
bool cmp(edges a , edges b){
return a.z > b.z;
}
void dfs(int x , int y){
for(auto t : adj[x]){
if(t.F == y) continue;
custo[t.F] = min(t.S , custo[x]);
dfs(t.F, x);
}
}
int32_t main(){
scanf("%d%d%d" , &n , &m , &q);
vector<edges> v(m);
for(int i = 0 ; i < n; i++){
pai[i] = i , peso[i] = 0;
}
for(int i = 0 ; i < m ; i++){
scanf("%d%d%d" , &v[i].x , &v[i].y, &v[i].z);
v[i].x -- , v[i].y--;
}
sort(v.begin() , v.end() , cmp);
for(int i = 0 ; i < m; i++){
if(find(v[i].x) != find(v[i].y)){
join(v[i].x , v[i].y);
adj[v[i].x].pb(pii(v[i].y , v[i].z));
adj[v[i].y].pb(pii(v[i].x , v[i].z));
}
}
for(int i = 0 ; i < ieps; i++) custo[i] = eps;
dfs(0 , 0);
while(q--){
int x;
scanf("%d" , &x);
printf("%d\n" , custo[x-1]);
}
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |