제출 #714796

#제출 시각아이디문제언어결과실행 시간메모리
714796murad_2005Stranded Far From Home (BOI22_island)C++14
0 / 100
142 ms19292 KiB
#include <bits/stdc++.h> #define ll long long #define ull unsigned ll #define ld long double #define pb push_back #define pf push_front #define pii pair<int, int> #define pllll pair<ll, ll> #define size(v) v.size() #define all(v) v.begin(), v.end() #define INF 2e9 #define f first #define s second using namespace std; vector<vector<int>>g; vector<ll>Sum; vector<ll>s; void dfs(int node, int par){ for(int to : g[node]){ if(to != par){ dfs(to, node); Sum[node] += Sum[to]; } } Sum[node] += s[node]; } void DFS(int node, int par, vector<int>&isOkay){ for(int to : g[node]){ if(to != par){ if(!isOkay[node]){ isOkay[to] = 0; }else{ if(Sum[to] >= s[node]){ isOkay[to] = 1; } } DFS(to, node, isOkay); } } } void Sub2(int n, int m, vector<ll>&Sum){ vector<int>isOkay(n + 1, 0); isOkay[1] = 1; dfs(1, 1); DFS(1, 1, isOkay); for(int i = 1; i <= n; ++i){ cout << isOkay[i]; } cout << "\n"; } void Sub3(int n, int m){ vector<ll>pref(n + 1, 0); for(int i = 1; i <= n; ++i){ pref[i] = pref[i - 1] + s[i]; } vector<int>Left(n + 1, 0), Right(n + 1, 0); ll r = 0; for(int i = 2; i <= n; ++i){ // left if(s[i - 1] > s[i]){ Left[i] = i - 1; r += (s[i - 1] - s[i]); }else{ if(r > s[i]){ Left[i] = Left[i - 1]; } r = max(0ll, r - s[i]); } } r = 0; for(int i = n - 1; i >= 1; i--){// right if(s[i + 1] > s[i]){ Right[i] = i + 1; r += (s[i + 1] - s[i]); }else{ if(r > s[i]){ Right[i] = Right[i + 1]; } r = max(0ll, r - s[i]); } } vector<ll>res(n + 1); for(int i = 1; i <= n; ++i){ if(Left[i] + Right[i] == 0){ res[i] = 1; }else if(Left[i] > 0 && Right[i] > 0){ res[i] = 0; }else{ if(Left[i] > 0){ ll x = Left[i]; if(pref[n] - pref[x] >= s[x]){ res[i] = 1; }else{ res[i] = 0; } }else{ ll x = Right[i]; if(pref[x - 1] >= s[x]){ res[i] = 1; }else{ res[i] = 0; } } } } for(int i = 1; i <= n; i++){ cout << res[i]; } cout << "\n"; } void solve(){ int n, m; cin >> n >> m; s.resize(n + 1); g.resize(n + 1); Sum.assign(n + 1, 0); for(int i = 1; i <= n; ++i){ cin >> s[i]; } for(int i = 1; i <= m; ++i){ int u, v; cin >> u >> v; g[u].pb(v); g[v].pb(u); } //Sub2(n, m, Sum); Sub3(n, m); } int main() { ios_base::sync_with_stdio(0); cin.tie(0); int t; // cin >> t; t = 1; while(t--){ solve(); } return 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...
#Verdict Execution timeMemoryGrader output
Fetching results...