Submission #1225800

#TimeUsernameProblemLanguageResultExecution timeMemory
1225800KALARRYSwapping Cities (APIO20_swap)C++20
37 / 100
2098 ms87688 KiB
//chockolateman #include<bits/stdc++.h> using namespace std; int n,m,min_good[100005],s[100005],p[100005],deg[100005]; stack<int> cur_elem[100005]; bool is_good[100005]; int find_Sett(int i) { if(p[i]==i) return p[i]; p[i] = find_Sett(p[i]); return p[i]; } bool is_Same_Sett(int i,int j) { return find_Sett(i)==find_Sett(j); } void union_Sett(int i,int j,int w) { int x = find_Sett(i); int y = find_Sett(j); deg[i]++; deg[j]++; if(deg[i] > 2) is_good[x] = true; if(deg[j] > 2) is_good[y] = true; if(is_Same_Sett(i,j)) is_good[x] = true; else { if(s[x] < s[y]) swap(x,y); p[y] = x; s[x] += s[y]; is_good[x] |= is_good[y]; if(cur_elem[y].size() > cur_elem[x].size()) swap(cur_elem[x],cur_elem[y]); while(!cur_elem[y].empty()) { int k = cur_elem[y].top(); cur_elem[y].pop(); cur_elem[x].push(k); } } if(is_good[x]) { while(!cur_elem[x].empty()) { int k = cur_elem[x].top(); cur_elem[x].pop(); min_good[k] = w; } } } pair<int,pair<int,int>> edges[200005]; vector<pair<int,int>> adj[200005]; void init(int N, int M, std::vector<int> U, std::vector<int> V, std::vector<int> W) { n = N; m = M; for(int i = 1 ; i <= N ; i++) { p[i] = i; s[i] = 1; min_good[i] = -1; cur_elem[i].push(i); } for(int i = 1 ; i <= M ; i++) edges[i] = {W[i-1],{V[i-1]+1,U[i-1]+1}}; sort(edges+1,edges+M+1); for(int v,u,w,i = 1 ; i <= M ; i++) { v = edges[i].second.first; u = edges[i].second.second; w = edges[i].first; adj[v].push_back({u,w}); adj[u].push_back({u,v}); union_Sett(v,u,w); } } int getMinimumFuelCapacity(int X, int Y) { X++; Y++; int ret = min_good[X]; if(ret==-1) return -1; for(int i = 1 ; i <= n ; i++) { p[i] = i; s[i] = 1; } sort(edges+1,edges+m+1); for(int v,u,w,i = 1 ; i <= m ; i++) { v = edges[i].second.first; u = edges[i].second.second; w = edges[i].first; union_Sett(v,u,w); ret = max(ret,w); if(is_Same_Sett(X,Y)) break; } return ret; }
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...