0w1

CFR 707 B. Bakery ( Ad hoc )

Problem - B - Codeforces
需要想那麼一下下。就會發現其實答案在輸入的邊上,且僅限於自身不是 bakery但連接的是 bakery的節點。取最小就行了。

void solve(){
    int N, M, K;
    cin >> N >> M >> K;
    if( K == 0 ){
        cout << -1 << endl;
        return;
    }
    vector< triplet > vt;
    for( int i = 0; i < M; ++i ){
        int u, v, w; cin >> u >> v >> w;
        vt.push_back( triplet( w, u, v ) );
        vt.push_back( triplet( w, v, u ) );
    }
    sort( vt.begin(), vt.end() );

    vi is_bakery( N + 1 );
    for( int i = 0; i < K; ++i ){
        int a; cin >> a;
        is_bakery[ a ] = 1;
    }

    ll ans = 1e16;
    for( int i = 0; i < vt.size(); ++i ){
        if( is_bakery[ vt[ i ].second ] and
                not is_bakery[ vt[ i ].third ] ){
            ans = vt[ i ].first;
            break;
        }
    }

    if( ans == 1e16 ) cout << -1 << endl;
    else cout << ans << endl;
}