제출 #496429

#제출 시각아이디문제언어결과실행 시간메모리
496429Nuraly_SerikbayValley (BOI19_valley)C++14
0 / 100
8 ms716 KiB
#include <bits/stdc++.h> #define endl "\n" #define mp make_pair #define pb push_back #define F first #define S second #define sz size() #define rep(i,k,n) for(int i = k ; i <= n ; ++i) #define per(i,k,n) for(int i = k ; i >= n ; --i) #define Zymraq() ios_base::sync_with_stdio(0),cin.tie(0),cout.tie(0) #define all(x) x.begin(),x.end() #define fr(x) freopen(x".in","r",stdin),freopen(x".out","w",stdout) #define toqta return 0 #define PERMUTE next_permutation #define no cout<<"No"<<endl; #define yes cout<<"Yes"<<endl; #define a() a + 1, a + n + 1 using namespace std; typedef long long ll; typedef unsigned long long ull; typedef string S; typedef double ld; typedef long double lld; const int N = 1e6 + 17; const int modd = 1e9 + 7; const int INF = 1e9 - 19; const int P = 37; const ll NN = 1e7 + 17; const ld eps = 1e-19; const double pi = 3.141592653589793238462643383279 ; bool sortbysec(const pair<int,int> &a, const pair<int,int> &b){ return (a.second < b.second); } void pre (ll a) { cout << fixed << setprecision(a); return; } ll n, s, q, e, dst[200]; vector <pair <ll, ll>> reb; vector <ll> g[200]; ll dist[200][200]; bool sp[200]; ll broke[200][200]; bool ok; void dfs (ll v, ll pr) { if (v == e) ok = 1; if (ok) return; for (auto to: g[v]) { if (!broke[v][to] && pr != to) { dst[to] = dst[v] + dist[v][to]; dfs (to, v); } } return; } inline void Solution () { cin >> n >> s >> q >> e; for (int i = 1; i < n; ++ i) { ll x, y, d; cin >> x >> y >> d; g[x].pb (y); g[y].pb (x); dist[x][y] = d; dist[y][x] = d; reb.pb (mp(x, y)); } for (int i = 1; i <= s; ++ i) { ll x; cin >> x; sp[x] = 1; } while (q --) { ll l, r, ans = INF; cin >> l >> r; broke[reb[l - 1].F][reb[l - 1].S] = 1; broke[reb[l - 1].S][reb[l - 1].F] = 1; ok = 0; for (int i = 1; i <= n; ++ i) dst[i] = 0; if (sp[r]) ans = 0; dfs (r, -1); broke[reb[l - 1].F][reb[l - 1].S] = 0; broke[reb[l - 1].S][reb[l - 1].F] = 0; if (ok) { cout << "escaped\n"; continue; } for (int i = 1; i <= n; ++ i) { if (sp[i] && dst[i] != 0) ans = min (ans, dst[i]); } if (ans == INF) { cout << "oo\n"; continue; } cout << ans << '\n'; } return; } int main () { Zymraq(); Solution (); exit (0); }/* */
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...