Submission #966434

#TimeUsernameProblemLanguageResultExecution timeMemory
966434NotLinuxStranded Far From Home (BOI22_island)C++17
100 / 100
233 ms46016 KiB
//author : FatihCihan #include <bits/stdc++.h> using namespace std; #define int long long #define all(v) v.begin() , v.end() #define sz(a) (int)a.size() const int N = 2e5 + 7; const int inf = 1e18 + 7; int n,m,s[N],ans[N],mem_value[N],mem_par[N],tar[N]; vector < int > graph[N] , adj[N]; int par[N] , value[N] , mx[N]; int find(int a){ if(par[a] == a)return a; else return par[a] = find(par[a]); } void merge(int a , int b){ a = find(a) , b = find(b); if(a == b)return; value[b] += value[a]; par[a] = b; if(s[mx[a]] > s[mx[b]])mx[b] = mx[a]; } void solve(){ cin >> n >> m; pair < int , int > village[n]; vector < int > compr; for(int i = 1;i<=n;i++){ cin >> s[i]; village[i-1] = {s[i] , i}; tar[i] = inf; par[i] = mx[i] = i , value[i] = s[i]; compr.push_back(s[i]); } sort(all(compr)); compr.resize(unique(all(compr)) - compr.begin()); sort(village , village + n); for(int i = 0;i<m;i++){ int ai,bi; cin >> ai >> bi; graph[ai].push_back(bi); graph[bi].push_back(ai); } int lp = 0; for(auto si : compr){ // cout << " SI : " << si << endl; vector < int > v; while(lp < n and s[village[lp].second] <= si){ v.push_back(village[lp].second); // cout << "v : " << village[lp].second << endl; lp++; } vector < pair < int , int > > gh; for(auto node : v){ for(auto itr : graph[node]){ if(s[itr] < s[node]){ gh.push_back({node , mx[find(itr)]}); } } } for(auto node : v){ for(auto itr : graph[node]){ if(s[itr] <= s[node]){ merge(itr , node); } } } // cout << "gh : "; for(auto itr : gh){ // cout << itr.first << "," << itr.second << " "; adj[find(itr.first)].push_back(itr.second); } // cout << endl; for(auto node : v){ mem_value[node] = value[find(node)]; mem_par[node] = find(node); // cout << node << " : " << mem_value[node] << " , " << mem_par[node] << endl; } // cout << "dsu : ";for(int i = 1;i<=n;i++)cout << i << ":" << find(i) << " ";cout << endl; } // cout << " ENDED" << endl; for(int i = 1;i<=n;i++){ sort(all(adj[i])); adj[i].resize(unique(all(adj[i])) - adj[i].begin()); } int mx_s = village[n-1].first; for(int i = 1;i<=n;i++){ if(s[i] == mx_s){ tar[i] = 0; } } for(int i = n-1;i>=0;i--){ // cout << "equal : " << village[i].second << " " << mem_par[village[i].second] << endl; // cout << "values : " << tar[village[i].second] << " " << mem_value[village[i].second] << endl; if(mem_par[village[i].second] != village[i].second)37; else if(tar[village[i].second] <= mem_value[village[i].second]){ ans[village[i].second] = 1; // cout << "adj " << village[i].second << " : "; for(auto itr : adj[village[i].second]){ // cout << itr << " "; tar[itr] = min(tar[itr] , s[village[i].second]); } // cout << endl; } else{ ans[village[i].second] = 0; } // cout << endl; } for(int i = 1;i<=n;i++){ cout << ans[mem_par[i]]; } cout << endl; } signed main(){ ios_base::sync_with_stdio(0);cin.tie(0); int testcase = 1;//cin >> testcase; while(testcase--)solve(); // cerr << 1000.0 * clock() / CLOCKS_PER_SEC << " ms" << endl; }

Compilation message (stderr)

island.cpp: In function 'void solve()':
island.cpp:96:54: warning: statement has no effect [-Wunused-value]
   96 |   if(mem_par[village[i].second] != village[i].second)37;
      |                                                      ^~
#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...