Submission #974773

#TimeUsernameProblemLanguageResultExecution timeMemory
974773p4r4d0_xStranded Far From Home (BOI22_island)C++14
0 / 100
1027 ms524288 KiB
#define _USE_MATH_DEFINES #include <bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> #define PUT(a, b) freopen(a, "r", stdin); freopen(b, "w", stdout); #define all(a) a.begin(), a.end() #define answerNO {cout << "No" << endl; return;} #define answerYES {cout << "Yes" << endl; return;} using namespace std; //#define int long long #define ff first #define ss second #define pb push_back #define replr(i, a, b) for (int i = int(a); i <= int(b); ++i) #define reprl(i, a, b) for (int i = int(a); i >= int(b); --i) #define rep(i, n) for (int i = 0; i < int(n); ++i) #define mkp(a, b) make_pair(a, b) typedef long long ll; typedef long double ld; typedef pair<int, int> PII; typedef vector<int> VI; typedef vector<PII> VPI; typedef pair<ll, ll> PLL; typedef vector<ll> VL; typedef vector<PLL> VPL; template<class T> T setmax(T& a, T b) {if (a < b) return a = b; return a;} template<class T> T setmin(T& a, T b) {if (a < b) return a; return a = b;} using namespace __gnu_pbds; #define ordered_set tree<int, null_type,less<int>, rb_tree_tag,tree_order_statistics_node_update> ll mod = 1e9+7; vector<vector<ll>> gp; vector<ll> a; vector<ll> dist; vector<ll> ans; vector<ll> par; vector<ll> sbtr; vector<ll> vis; void sub(ll node, ll p = -1){ sbtr[node] = a[node]; for(auto v : gp[node]) if(v != p){ sub(v, node); sbtr[node] += sbtr[v]; } } void dfs1(ll u, ll p = -1){ if(ans[u] == 0){ for(auto v : gp[u]) if(v != p){ ans[v] = 0; } } } void dfs(ll u, ll p = -1){ if(p == -1){ dist[u] = 0; par[u] = -1; } for(auto v : gp[u]) if(v != p){ par[v] = u; dist[v] = dist[u] + 1; } } inline void solve(){ ll n, m; cin >> n >> m; gp.resize(n); a.resize(n); vis.resize(n); sbtr.resize(n); dist.resize(n); par.resize(n); ans.resize(n, -1); rep(i, n){ cin >> a[i]; } rep(i, m){ ll u, v; cin >> u >> v; --u, --v; gp[u].pb(v); gp[v].pb(u); } dfs(0, -1); sub(0, -1); rep(i, n){ if(sbtr[par[i]] > sbtr[i]){ ans[i] = 0; } else{ ans[i] = 1; } } ans[0] = 1; dfs1(0, -1); for(auto x : ans){ cout << x << " "; } } signed main() { ios_base::sync_with_stdio(false); cin.tie(NULL), cout.tie(NULL); //PUT(".in", ".out"); int t = 1; //cin >> t; while(t--){ 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...
#Verdict Execution timeMemoryGrader output
Fetching results...