제출 #723101

#제출 시각아이디문제언어결과실행 시간메모리
723101Mr_HusanboyStranded Far From Home (BOI22_island)C++17
20 / 100
231 ms23628 KiB
#include<bits/stdc++.h> using namespace std; using ll = long long; void sub1(int &n, int &m, vector<vector<int>> &g, vector<int> &s){ if(n > 2000) return; #ifdef LOCAL cout << "sub1" << endl; #endif auto check = [&](int i)->int{ priority_queue<pair<int,int>> q; ll cur = s[i]; vector<int> used(n); used[i] = 1; for(auto u : g[i]){ q.push({-s[u], u}); used[u] = 1; } int cnt = 1; while(!q.empty()){ int t = q.top().second; q.pop(); //cout << t + 1 << endl; if(s[t] <= cur){ cur += s[t]; cnt ++; }else{ return 0; } for(auto u : g[t]){ if(used[u]) continue; used[u] = 1; q.push({-s[u], u}); } } return cnt == n; }; for(int i = 0; i < n; i ++){ cout << check(i); } exit(0); } void sub2(int &n, int &m, vector<vector<int>> &g, vector<int> &s){ vector<int> cnt(n); vector<ll> calc(n); for(int i = 0; i < n; i ++){ //calc[i] = s[i]; for(auto u : g[i]){ if(u < i) cnt[i] ++; //calc[i] += s[u]; } } for(int i = 1; i < n; i ++){ if(cnt[i] != 1) return; } for(int i = 1; i < n; i ++){ if(s[i] > s[i - 1]) return; } #ifdef LOCAL cout << "sub2" << endl; #endif vector<int> dp(n); dp[0] = 1; auto dfs = [&](auto & dfs, int i, int p)->void{ calc[i] = s[i]; for(auto u : g[i]){ if(u == p) continue; dfs(dfs, u, i); calc[i] += calc[u]; } }; dfs(dfs, 0, 0); auto dfs2 = [&](auto &dfs2, int i, int p)->void{ for(auto u : g[i]){ if(u == p) continue; if(calc[u] >= s[i]) dp[u] |= dp[i]; dfs2(dfs2, u, i); } }; dfs2(dfs2, 0, 0); for(auto u : dp) cout << u; exit(0); } void solve(){ int n, m; cin >> n >> m; vector<int> s(n); for(auto &u : s) cin >> u; vector<vector<int>> g(n); for(int i = 0; i < m; i ++){ int u, v; cin >> u >> v; u --; v --; g[u].push_back(v); g[v].push_back(u); } sub2(n, m, g, s); sub1(n, m, g, s); } int main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int testcases = 1; //cin >> testcases; while(testcases --){ solve(); if(testcases) cout << '\n'; #ifdef LOCAL else cout << '\n'; cout << "___________________" << endl; #endif } 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...