# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1136996 | Ciprian | Crocodile's Underground City (IOI11_crocodile) | C++20 | 0 ms | 0 KiB |
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N=1003;
vector<int>adj[N], fin(N);
void dfs(int x, int p, vector<vector<int>>const t){
if(adj[x].size()==1){
return;
}
for(auto e: adj[x]){
if(e==p)continue;
dfs(e,x, t);
}int mn1=1e9, mn2=1e9;
for(auto e: adj[x]){
if(e==p)continue;
mn1=min(mn1, fin[e]+t[x][e]);
}for(auto e: adj[x]){
if(e==p)continue;
if(fin[e]+t[x][e]!=mn1){
mn2=min(mn2, fin[e]+t[x][e]);
}
}fin[x]=mn2;
}
int32_t main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
int n,m,k;
cin>>n>>m>>k;
vector<vector<int>> tm(N, vector<int>(N));
for(int i=0; i<m; i++){
int x,y,z;
cin>>x>>y>>z;
adj[x].push_back(y);
adj[y].push_back(x);
tm[x][y]=z;
tm[y][x]=z;
}vector<bool>p(N);
for(int i=0; i<k; i++){
int x;
cin>>x;
p[x]=true;
}dfs(0,0, tm);
cout<<fin[0]<<endl;
return 0;
}