QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#328567 | #837. Giant Penguin | CharlieVinnie | RE | 25ms | 11436kb | C++17 | 2.7kb | 2024-02-15 21:14:34 | 2024-02-15 21:14:36 |
Judging History
answer
#include "bits/stdc++.h"
#ifdef DEBUG
#include "PrettyDebug.hpp"
#else
#define debug(...) [](auto...){}(__VA_ARGS__)
#define debuga(...) [](auto...){}(__VA_ARGS__)
#endif
#define For(i,a,b) for(int i=a;i<=b;i++)
#define Rev(i,a,b) for(int i=a;i>=b;i--)
#define Fin(file) freopen(file,"r",stdin)
#define Fout(file) freopen(file,"w",stdout)
using namespace std; typedef long long ll;
constexpr int N=1e5+5; using pii = pair<int,int>;
int n,m,K,Q,col[N],colcnt,C,siz[N],cursiz,vis[N],V,ins[N],tfa[N],mx[N],dis[N]; vector<int> to[N],ed[N]; vector<int> tmp,qwq; vector<pii> lis[N];
void dfs0(int u){
mx[u]=0; siz[u]=1; vis[u]=V; qwq.push_back(u);
for(int v:to[u]) if(col[v]==C&&vis[v]!=V){
ed[u].push_back(v); ed[v].push_back(u);
dfs0(v); siz[u]+=siz[v]; mx[u]=max(mx[u],siz[v]);
}
}
void dfs(int u,int pa){
siz[u]=1; ins[u]=1; qwq.push_back(u);
for(int v:ed[u]) if(v!=pa) tfa[v]=u,dfs(v,u),siz[u]+=siz[v];
for(int v:to[u]) if(v!=pa&&col[v]==C&&tfa[v]!=u&&!ins[v]) tmp.push_back(u);
ins[u]=0;
}
void gcol(int u,int pa) { col[u]=C; for(int v:ed[u]) if(v!=pa) gcol(v,u); }
void solve(int rt){
debug(rt);
C=col[rt]; V++; qwq.clear(); dfs0(rt); for(int u:qwq) if(mx[u]<=siz[rt]/2&&siz[rt]-siz[u]<=siz[rt]/2) { rt=u; break; }
tmp={rt}; dfs(rt,0); sort(tmp.begin(),tmp.end()); tmp.erase(unique(tmp.begin(),tmp.end()),tmp.end());
assert(tmp.size()<=2u*K+1);
debug("hey");
for(int S:tmp){
for(int u:qwq) dis[u]=1e9;
queue<int> q; q.push(S); dis[S]=0;
while(q.size()){
int u=q.front(); q.pop(); lis[u].emplace_back(S,dis[u]);
for(int v:to[u]) if(col[v]==C&&dis[v]==1e9) dis[v]=dis[u]+1,q.push(v);
}
}
for(int u:ed[rt]) C++,gcol(u,rt);
auto awa=ed[rt]; for(int u:qwq) ed[u].clear();
for(int u:awa) solve(u);
}
signed main(){
// Fin("hh.in");
atexit([](){cerr<<"Time = "<<clock()<<" ms"<<endl;});
ios::sync_with_stdio(0); cin.tie(0);
cin>>n>>m>>K; For(i,1,m) { int x,y; cin>>x>>y; to[x].push_back(y); to[y].push_back(x); }
cursiz=n; solve(1); For(i,1,n) sort(lis[i].begin(),lis[i].end()),lis[i].erase(unique(lis[i].begin(),lis[i].end()),lis[i].end());
For(i,1,n) dis[i]=1e9;
cin>>Q; while(Q--){
int op,x; cin>>op>>x;
if(op==1) { for(auto [u,d]:lis[x]) dis[u]=min(dis[u],d); }
else { int ans=1e9; for(auto [u,d]:lis[x]) ans=min(ans,dis[u]+d);; cout<<ans<<'\n'; }
}
return 0;
}
// CONTINUE, NON-STOPPING, FOR CHARLIEY
// START TYPING IF YOU DON'T KNOW WHAT TO DO
// STOP TYPING IF YOU DON'T KNOW WHAT YOU'RE DOING
// Started Coding On: February 15 Thu, 20 : 22 : 03
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 0ms
memory: 11436kb
input:
5 4 0 1 2 2 3 3 4 4 5 7 1 1 1 5 2 1 2 2 2 3 2 4 2 5
output:
0 1 2 1 0
result:
ok 5 number(s): "0 1 2 1 0"
Test #2:
score: 0
Accepted
time: 0ms
memory: 11304kb
input:
5 6 2 1 2 2 3 1 3 3 4 4 5 3 5 3 1 1 2 4 2 5
output:
2 2
result:
ok 2 number(s): "2 2"
Test #3:
score: 0
Accepted
time: 25ms
memory: 10992kb
input:
100 99 0 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 11 11 12 12 13 13 14 14 15 15 16 16 17 17 18 18 19 19 20 20 21 21 22 22 23 23 24 24 25 25 26 26 27 27 28 28 29 29 30 30 31 31 32 32 33 33 34 34 35 35 36 36 37 37 38 38 39 39 40 40 41 41 42 42 43 43 44 44 45 45 46 46 47 47 48 48 49 49 50 50 51 51 52 52...
output:
99 98 97 96 95 94 93 92 91 90 89 88 87 86 85 84 83 82 81 80 79 78 77 76 75 74 73 72 71 70 69 68 67 66 65 64 63 62 61 60 59 58 57 56 55 54 53 52 51 50 49 48 47 46 45 44 43 42 41 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 99 98 97 9...
result:
ok 199968 numbers
Test #4:
score: 0
Accepted
time: 18ms
memory: 11252kb
input:
100 99 0 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 1 10 1 11 1 12 1 13 1 14 1 15 1 16 1 17 1 18 1 19 1 20 1 21 1 22 1 23 1 24 1 25 1 26 1 27 1 28 1 29 1 30 1 31 1 32 1 33 1 34 1 35 1 36 1 37 1 38 1 39 1 40 1 41 1 42 1 43 1 44 1 45 1 46 1 47 1 48 1 49 1 50 1 51 1 52 1 53 1 54 1 55 1 56 1 57 1 58 1 59 1 60 1 61...
output:
1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 0 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 ...
result:
ok 199966 numbers
Test #5:
score: 0
Accepted
time: 19ms
memory: 10920kb
input:
100 99 0 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 1 10 1 11 1 12 1 13 1 14 1 15 1 16 1 17 1 18 1 19 1 20 1 21 1 22 1 23 1 24 2 25 1 26 1 27 1 28 2 29 1 30 1 31 1 32 1 33 2 34 1 35 1 36 2 37 1 38 4 39 1 40 1 41 2 42 2 43 1 44 1 45 2 46 1 47 1 48 1 49 2 50 2 51 1 52 1 53 1 54 2 55 3 56 2 57 1 58 2 59 2 60 3 61...
output:
2 3 3 1 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 3 3 3 4 3 3 3 3 4 3 3 4 3 2 3 3 4 4 3 3 4 3 3 3 4 4 3 3 3 4 4 4 3 4 4 4 3 3 4 3 3 3 4 4 4 3 3 3 3 3 4 3 3 3 3 3 3 3 3 3 3 4 4 3 0 3 3 4 3 4 3 3 4 3 4 2 3 3 1 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 3 3 3 4 3 3 3 3 4 3 3 4 3 2 3 3 4 4 3 3 4 3 3 3 4 ...
result:
ok 199964 numbers
Test #6:
score: 0
Accepted
time: 21ms
memory: 10692kb
input:
100 99 0 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 11 11 12 12 13 13 14 14 15 15 16 16 17 17 18 18 19 19 20 20 21 21 22 22 23 23 24 24 25 25 26 26 27 27 28 28 29 28 30 30 31 31 32 32 33 33 34 34 35 35 36 36 37 37 38 38 39 39 40 39 41 41 42 41 43 41 44 44 45 44 46 46 47 44 48 48 49 48 50 50 51 50 52 51...
output:
68 67 66 65 64 63 62 61 60 59 58 57 56 55 54 53 52 51 50 49 48 47 46 45 44 43 42 41 42 40 39 38 37 36 35 34 33 32 31 32 30 31 31 29 30 30 31 28 29 27 28 26 29 25 24 23 24 22 25 26 21 22 23 20 19 20 18 17 18 16 15 14 16 13 14 15 12 16 11 10 9 10 8 16 7 6 5 6 7 4 7 8 9 10 11 3 10 2 1 0 68 67 66 65 64 ...
result:
ok 199966 numbers
Test #7:
score: 0
Accepted
time: 25ms
memory: 11000kb
input:
100 102 10 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 11 11 12 12 13 13 14 14 15 15 16 16 17 17 18 18 19 19 20 20 21 21 22 22 23 23 24 24 25 25 26 26 27 27 28 28 29 29 30 30 31 31 32 32 33 33 34 34 35 35 36 36 37 37 38 38 39 39 40 40 41 41 42 42 43 43 44 44 45 45 46 46 47 47 48 48 49 49 50 50 51 51 52 ...
output:
24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 37 36 35 34 33 32 31 30 29 28 27 26 25 26 27 28 29 30 31 32 33 34 35 36 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 20 19 1...
result:
ok 199973 numbers
Test #8:
score: -100
Runtime Error
input:
75 102 10 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 11 11 12 12 13 13 14 14 15 15 16 16 17 17 18 18 19 19 20 20 21 21 22 22 23 23 24 24 25 25 1 1 19 13 25 1 26 26 27 27 1 2 28 28 29 29 2 3 30 30 31 31 3 4 32 32 33 33 4 5 34 34 35 35 5 6 36 36 37 37 6 7 38 38 39 39 7 8 40 40 41 41 8 9 42 42 43 43 9 10 ...