Submission #837213

#TimeUsernameProblemLanguageResultExecution timeMemory
837213HanksburgerStranded Far From Home (BOI22_island)C++17
100 / 100
199 ms46636 KiB
#include <bits/stdc++.h> using namespace std; long long s[200005], par[200005], sz[200005], ok[200005]; vector<long long> adj[200005], child[200005]; pair<long long, long long> a[200005]; long long findPar(long long u) { return (par[u]==u)?u:(par[u]=findPar(par[u])); } void dfs(long long u) { sz[u]=s[u]; for (long long v:child[u]) { dfs(v); sz[u]+=sz[v]; } } void dfs2(long long u, long long p) { if (sz[u]<s[p]) return; ok[u]=1; for (long long v:child[u]) dfs2(v, u); } int main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); long long n, m; cin >> n >> m; for (long long i=1; i<=n; i++) { cin >> s[i]; a[i]={s[i], i}; } sort(a+1, a+n+1); for (long long i=1; i<=m; i++) { long long u, v; cin >> u >> v; adj[u].push_back(v); adj[v].push_back(u); } for (long long i=1; i<=n; i++) par[i]=i; for (long long i=1; i<=n; i++) { set<long long> ss; long long u=a[i].second; for (long long v:adj[u]) if ((s[v]<s[u] || (s[v]==s[u] && v<u)) && ss.find(findPar(v))==ss.end()) ss.insert(par[v]); for (long long v:ss) { par[v]=u; child[u].push_back(v); } } dfs(a[n].second); dfs2(a[n].second, 0); for (long long i=1; i<=n; i++) cout << ok[i]; }
#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...