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; }