제출 #1148581

#제출 시각아이디문제언어결과실행 시간메모리
1148581arkanefuryValley (BOI19_valley)C++20
59 / 100
177 ms35784 KiB
#include <bits/stdc++.h> #define pb push_back using namespace std; #define F first #define S second #define int long long #define FOR(x, n, m, d) for(int x = n; x <= m; x += d) #define FORR(x, n, m, d) for(int x = n; x >= m; x -= d) #define nikita ios_base::sync_with_stdio(0), cin.tie(0); const int N = 1e5+150; int n,m,k,tt,ans,l, r, x, y, cnt, ko = 0; int b[N],a[N], sum, root[N], block = 620, d[N], c[N], up[N][21], par[N]; string s[N], str; vector<pair<int, int>>g[N]; bool f = 0; map<pair<int, int>, int>mp; void dfs(int v, int p = 0, int sum = 0){ if(cnt == v){f = 1;return;} if(c[v]){ ko = min(ko, sum); } for(auto i : g[v]){ if(i.F != p && mp[{v, i.F}] == 0){ dfs(i.F, v, sum + i.S); } } } int lca(int x, int y){ if(d[x] <= d[y])swap(x, y); FORR(i, 20, 0, 1)if(d[y] <= d[up[x][i]])x = up[x][i]; if(x == y)return y; FORR(i, 20, 0, 1)if(up[x][i] != up[y][i])x = up[x][i], y = up[y][i]; return up[x][0]; } void sol(int v, int p = 0){ d[v] = d[p] + 1; par[v] = p; for(auto i : g[v]){ if(p != i.F && v != i.F)sol(i.F, v); } } void solve(){ nikita cin >> n >> m >> k >> cnt; FOR(i, 1, n-1, 1){ cin >> a[i] >> b[i] >> r; x = a[i], y = b[i]; g[x].pb({y, r}), g[y].pb({x, r}); } FOR(i, 1, m, 1)cin >> d[i], c[d[i]] = 1; if(n > 1000 || m > 1000){ sol(1); FOR(i, 1,n, 1)up[i][0] = par[i]; FOR(i, 1, 20, 1){ FOR(j,1,n,1)up[j][i] = up[up[j][i-1]][i-1]; } FOR(i, 1, k, 1){ cin >> x >> y; int lp = lca(y, cnt); if(a[x] == lca(a[x], y) && b[x] == lca(b[x], y) && min(d[a[x]], d[b[x]]) >= d[lp] || a[x] == lca(a[x], cnt) && b[x] == lca(b[x], cnt) && d[lp] <= min(d[a[x]], d[b[x]])){ cout << "0\n"; } else cout << "escaped\n"; } return; } FOR(i, 1, k, 1){ f = 0; ko = 1e18; cin >> x >> y; mp[{a[x], b[x]}] = 1, mp[{b[x], a[x]}] = 1; dfs(y); mp[{a[x], b[x]}] = mp[{b[x], a[x]}] = 0; if(f)cout << "escaped\n"; else if(ko != 1e18)cout << ko << '\n'; else cout << "oo\n"; } } signed main() { nikita tt = 1; if(!tt)cin >> tt; FOR(i, 1, tt, 1){ solve(); } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...