# |
Submission time |
Handle |
Problem |
Language |
Result |
Execution time |
Memory |
608897 |
2022-07-27T11:04:12 Z |
jk410 |
Keys (IOI21_keys) |
C++17 |
|
3000 ms |
197888 KB |
//koosaga is god and I'm invincible
//upsolving
#include <bits/stdc++.h>
#define all(v) v.begin(),v.end()
#define sz(v) ((int)(v).size())
using namespace std;
const int INF=(int)1e9;
struct dsjs{
vector<int> par;
void init(int n){
par.resize(n);
for (int i=0; i<n; i++)
par[i]=i;
}
int get_par(int v){
if (v==par[v])
return v;
return par[v]=get_par(par[v]);
}
bool my_merge(int a,int b){
a=get_par(a);
b=get_par(b);
if (a==b)
return false;
par[b]=a;
return true;
}
};
vector<stack<int>> psb_edge;
vector<multiset<pair<int,int>>> impsb_edge;
vector<set<int>> key;
vector<int> nxt;
dsjs idx,graph;
void merge_vertex(int cur,int to){
if (sz(psb_edge[cur])>sz(psb_edge[to]))
swap(psb_edge[cur],psb_edge[to]);
while (!psb_edge[cur].empty()){
psb_edge[to].push(psb_edge[cur].top());
psb_edge[cur].pop();
}
if (sz(impsb_edge[cur])<sz(impsb_edge[to]))
swap(impsb_edge[cur],impsb_edge[to]);
for (auto i=impsb_edge[cur].begin(); i!=impsb_edge[cur].end(); i=impsb_edge[cur].erase(i))
impsb_edge[to].insert(*i);
if (sz(key[cur])>sz(key[to]))
swap(key[cur],key[to]);
for (auto i=key[cur].begin(); i!=key[cur].end(); i=key[cur].erase(i))
key[to].insert(*i);
for (int i:key[to]){
auto it=impsb_edge[to].lower_bound({i,-1});
while (it!=impsb_edge[to].end()&&it->first==i){
psb_edge[to].push(it->second);
it=impsb_edge[to].erase(it);
}
}
}
vector<int> find_reachable(vector<int> r,vector<int> u,vector<int> v,vector<int> c){
int n=sz(r);
int m=sz(c);
psb_edge.resize(n*2);
impsb_edge.resize(n*2);
nxt.resize(n*2);
key.resize(n*2);
idx.init(n*2);
graph.init(n*2);
vector<int> ret(n);
for (int i=0; i<m; i++){
if (c[i]==r[u[i]])
psb_edge[u[i]].push(v[i]);
else
impsb_edge[u[i]].insert({c[i],v[i]});
if (c[i]==r[v[i]])
psb_edge[v[i]].push(u[i]);
else
impsb_edge[v[i]].insert({c[i],u[i]});
}
for (int i=0; i<n; i++){
key[i].insert(r[i]);
nxt[i]=i;
if (!psb_edge[i].empty()){
nxt[i]=psb_edge[i].top();
psb_edge[i].pop();
}
}
for (int i=0; i<n; i++){
//cout<<i<<" "<<nxt[i]<<" "<<idx.get_par(i)<<" "<<idx.get_par(nxt[i])<<"\n";
if (idx.get_par(i)==idx.get_par(nxt[i]))
continue;
if (!graph.my_merge(idx.get_par(i),idx.get_par(nxt[i]))){
//cout<<"!"<<idx.get_par(i)<<" "<<graph.get_par(idx.get_par(i))<<"\n";
graph.par[graph.get_par(idx.get_par(i))]=n;
for (int j=idx.get_par(i);;){
merge_vertex(j,n);
int tmp=j;
j=idx.get_par(nxt[j]);
idx.par[idx.get_par(tmp)]=n;
if (j==idx.get_par(i))
break;
}
nxt[n]=n;
while (!psb_edge[n].empty()&&idx.get_par(psb_edge[n].top())==n){
//cout<<psb_edge[n].top()<<" "<<idx.get_par(psb_edge[n].top())<<"\n";
psb_edge[n].pop();
}
if (!psb_edge[n].empty()){
nxt[n]=psb_edge[n].top();
psb_edge[n].pop();
}
//cout<<n<<" "<<nxt[n]<<" "<<idx.get_par(nxt[n])<<"\n";
n++;
}
}
vector<int> cnt(n);
for (int i=0; i<sz(ret); i++)
cnt[idx.get_par(i)]++;
for (int i=0; i<sz(ret); i++){
ret[i]=INF;
if (idx.get_par(i)==idx.get_par(nxt[i]))
ret[i]=cnt[idx.get_par(i)];
//cout<<i<<" "<<idx.get_par(i)<<" "<<idx.get_par(nxt[i])<<" "<<ret[i]<<"\n";
}
//cout<<"\n";
int minv=*min_element(all(ret));
for (int i=0; i<sz(ret); i++)
ret[i]=(ret[i]==minv);
return ret;
}
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
296 KB |
Output is correct |
2 |
Correct |
1 ms |
212 KB |
Output is correct |
3 |
Correct |
1 ms |
212 KB |
Output is correct |
4 |
Correct |
1 ms |
596 KB |
Output is correct |
5 |
Correct |
1 ms |
212 KB |
Output is correct |
6 |
Correct |
1 ms |
304 KB |
Output is correct |
7 |
Correct |
1 ms |
212 KB |
Output is correct |
8 |
Correct |
1 ms |
432 KB |
Output is correct |
9 |
Correct |
1 ms |
468 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
296 KB |
Output is correct |
2 |
Correct |
1 ms |
212 KB |
Output is correct |
3 |
Correct |
1 ms |
212 KB |
Output is correct |
4 |
Correct |
1 ms |
596 KB |
Output is correct |
5 |
Correct |
1 ms |
212 KB |
Output is correct |
6 |
Correct |
1 ms |
304 KB |
Output is correct |
7 |
Correct |
1 ms |
212 KB |
Output is correct |
8 |
Correct |
1 ms |
432 KB |
Output is correct |
9 |
Correct |
1 ms |
468 KB |
Output is correct |
10 |
Correct |
1 ms |
724 KB |
Output is correct |
11 |
Correct |
1 ms |
552 KB |
Output is correct |
12 |
Correct |
1 ms |
556 KB |
Output is correct |
13 |
Correct |
0 ms |
300 KB |
Output is correct |
14 |
Correct |
0 ms |
212 KB |
Output is correct |
15 |
Correct |
1 ms |
468 KB |
Output is correct |
16 |
Correct |
1 ms |
212 KB |
Output is correct |
17 |
Incorrect |
1 ms |
212 KB |
Output isn't correct |
18 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
296 KB |
Output is correct |
2 |
Correct |
1 ms |
212 KB |
Output is correct |
3 |
Correct |
1 ms |
212 KB |
Output is correct |
4 |
Correct |
1 ms |
596 KB |
Output is correct |
5 |
Correct |
1 ms |
212 KB |
Output is correct |
6 |
Correct |
1 ms |
304 KB |
Output is correct |
7 |
Correct |
1 ms |
212 KB |
Output is correct |
8 |
Correct |
1 ms |
432 KB |
Output is correct |
9 |
Correct |
1 ms |
468 KB |
Output is correct |
10 |
Correct |
1 ms |
724 KB |
Output is correct |
11 |
Correct |
1 ms |
552 KB |
Output is correct |
12 |
Correct |
1 ms |
556 KB |
Output is correct |
13 |
Correct |
0 ms |
300 KB |
Output is correct |
14 |
Correct |
0 ms |
212 KB |
Output is correct |
15 |
Correct |
1 ms |
468 KB |
Output is correct |
16 |
Correct |
1 ms |
212 KB |
Output is correct |
17 |
Incorrect |
1 ms |
212 KB |
Output isn't correct |
18 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
296 KB |
Output is correct |
2 |
Correct |
1 ms |
212 KB |
Output is correct |
3 |
Correct |
1 ms |
212 KB |
Output is correct |
4 |
Correct |
1 ms |
596 KB |
Output is correct |
5 |
Correct |
1 ms |
212 KB |
Output is correct |
6 |
Correct |
1 ms |
304 KB |
Output is correct |
7 |
Correct |
1 ms |
212 KB |
Output is correct |
8 |
Correct |
1 ms |
432 KB |
Output is correct |
9 |
Correct |
1 ms |
468 KB |
Output is correct |
10 |
Execution timed out |
3062 ms |
197888 KB |
Time limit exceeded |
11 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
296 KB |
Output is correct |
2 |
Correct |
1 ms |
212 KB |
Output is correct |
3 |
Correct |
1 ms |
212 KB |
Output is correct |
4 |
Correct |
1 ms |
596 KB |
Output is correct |
5 |
Correct |
1 ms |
212 KB |
Output is correct |
6 |
Correct |
1 ms |
304 KB |
Output is correct |
7 |
Correct |
1 ms |
212 KB |
Output is correct |
8 |
Correct |
1 ms |
432 KB |
Output is correct |
9 |
Correct |
1 ms |
468 KB |
Output is correct |
10 |
Correct |
1 ms |
724 KB |
Output is correct |
11 |
Correct |
1 ms |
552 KB |
Output is correct |
12 |
Correct |
1 ms |
556 KB |
Output is correct |
13 |
Correct |
0 ms |
300 KB |
Output is correct |
14 |
Correct |
0 ms |
212 KB |
Output is correct |
15 |
Correct |
1 ms |
468 KB |
Output is correct |
16 |
Correct |
1 ms |
212 KB |
Output is correct |
17 |
Incorrect |
1 ms |
212 KB |
Output isn't correct |
18 |
Halted |
0 ms |
0 KB |
- |