#include <bits/stdc++.h>
using namespace std;
#define int long long
#define fi first
#define se second
const int MAX = 5e5 + 10;
typedef pair <int, int> ii;
typedef pair <int, ii> iii;
vector <iii> in;
vector <ii> g[MAX];
int par[MAX], sz[MAX], n, q, m;
int act(int v)
{
if (par[v] == v) return v;
par[v] = act(par[v]);
return par[v];
}
bool innit(int x, int y)
{
int a = act(x);
int b = act(y);
if(a == b ) return false;
if(sz[a] < sz[b]) swap(a, b);
par[b] = a;
sz[a] += sz[b];
return true;
}
bool ope(iii a, iii b)
{
return a.fi > b.fi;
}
int dist[MAX];
void dfs(int u, int par)
{
for(auto x : g[u]){
int v = x.fi;
int w = x.se;
if(v != par){
dist[v] = min(dist[u], w);
dfs(v, u);
}
}
}
signed main()
{
ios_base::sync_with_stdio(0); cout.tie(0); cin.tie(0);
cin >> n >> m >> q;
for(int i = 1; i <= n; i++){
par[i] = i;
sz[i] = 1;
}
for(int i = 1; i <= m; i++){
int x, y, val; cin >> x >> y >> val;
in.push_back({val, {x, y}});
}
sort(in.begin(), in.end(), ope);
for(int i = 0; i < m; i++){
int u = in[i].se.fi;
int v = in[i].se.se;
int w = in[i].fi;
if(innit(u, v)){
g[u].push_back({v, w});
g[v].push_back({u, w});
}
}
dist[1] = 1e9;
dfs(1, -1);
while(q--){
int x; cin >> x;
cout << dist[x] << "\n";
}
return 0;
}
| # | 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... |