| # | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 | 
|---|---|---|---|---|---|---|---|
| 1136996 | Ciprian | 악어의 지하 도시 (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;
}
