QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#210447 | #6543. Visiting Friend | ucup-team1004 | AC ✓ | 255ms | 89124kb | C++14 | 2.3kb | 2023-10-11 14:39:35 | 2023-10-11 14:39:36 |
Judging History
answer
#include<bits/stdc++.h>
using namespace std;
using ll=long long;
template<typename T>
ostream& operator << (ostream &out,const vector<T>&x){
if(x.empty())return out<<"[]";
out<<'['<<x[0];
for(int len=x.size(),i=1;i<len;i++)out<<','<<x[i];
return out<<']';
}
template<typename T>
vector<T> ary(const T *a,int l,int r){
return vector<T>{a+l,a+1+r};
}
template<typename T>
void debug(T x){
cerr<<x<<'\n';
}
template<typename T,typename ...S>
void debug(T x,S ...y){
cerr<<x<<' ',debug(y...);
}
const int N=2e5+10,M=N*2;
int T,n,m,q,k;
vector<int>A[N],B[M];
int dft,top,dfn[N],low[N],stk[N];
void add(int u,int v){
// debug(u,v);
B[u].push_back(v),B[v].push_back(u);
}
void tarjan(int u,int fa=0){
dfn[u]=low[u]=++dft,stk[++top]=u;
for(int v:A[u])if(v^fa){
if(!dfn[v]){
tarjan(v),low[u]=min(low[u],low[v]);
if(low[v]>=dfn[u]){
add(++k,u);
do add(k,stk[top]);while(stk[top--]^v);
}
}else low[u]=min(low[u],dfn[v]);
}
}
int sum[M],fa[M],dep[M];
namespace Path{
int dft,siz[M],son[M],top[M],dfn[M],pos[M];
void dfs1(int u){
son[u]=0,siz[u]=1,dep[u]=dep[fa[u]]+1;
sum[u]=0;
for(int v:B[u])if(v^fa[u]){
fa[v]=u,dfs1(v);
siz[u]+=siz[v],sum[u]+=sum[v];
if(siz[v]>siz[son[u]])son[u]=v;
}
if(u<=n)sum[u]++;
}
void dfs2(int u,int t){
top[u]=t,pos[dfn[u]=++dft]=u;
if(son[u])dfs2(son[u],t);
for(int v:B[u])if(v^fa[u]&&v^son[u])dfs2(v,v);
}
int LCA(int u,int v){
for(;top[u]^top[v];u=fa[top[u]]){
if(dep[top[u]]<dep[top[v]])swap(u,v);
}
return dep[u]<dep[v]?u:v;
}
int jump(int u,int k){
for(;k>dep[u]-dep[top[u]];u=fa[top[u]])k-=dep[u]-dep[top[u]]+1;
return pos[dfn[u]-k];
}
}
void get(){
scanf("%d%d",&n,&m),k=n;
for(int u,v;m--;){
scanf("%d%d",&u,&v);
A[u].push_back(v),A[v].push_back(u);
}
tarjan(1);
Path::dfs1(1),Path::dfs2(1,1);
scanf("%d",&q);
for(int u,v;q--;){
scanf("%d%d",&u,&v);
int t=Path::LCA(u,v);
if(v==t)swap(u,v);
if(u==t){
printf("%d\n",sum[Path::jump(v,dep[v]-dep[u]-1)]-sum[v]+2);
}else{
printf("%d\n",n-sum[u]-sum[v]+2);
}
}
}
void clr(){
dft=top=Path::dft=0;
for(int i=1;i<=n;i++){
A[i].clear();
dfn[i]=low[i]=0;
}
for(int i=1;i<=k;i++){
B[i].clear();
}
}
int main(){
for(scanf("%d",&T);T--;clr())get();
return 0;
}
这程序好像有点Bug,我给组数据试试?
详细
Test #1:
score: 100
Accepted
time: 0ms
memory: 28600kb
input:
1 5 5 1 2 1 3 2 4 4 5 2 5 5 1 2 1 4 2 3 2 5 3 5
output:
2 4 3 3 5
result:
ok 5 number(s): "2 4 3 3 5"
Test #2:
score: 0
Accepted
time: 0ms
memory: 28384kb
input:
100 10 25 7 4 1 10 7 2 3 4 5 7 9 10 10 5 8 10 6 7 9 1 4 2 2 6 8 5 6 9 5 9 7 1 2 1 4 1 9 8 8 3 1 8 4 8 2 10 3 1 3 6 100 6 4 10 8 5 4 7 8 3 10 5 9 6 9 6 8 2 10 10 9 6 9 1 8 3 6 10 9 1 4 10 8 1 6 5 1 5 10 9 1 3 5 8 7 3 2 3 9 2 9 9 4 2 10 8 4 6 2 2 1 7 4 3 6 6 5 10 6 1 4 5 1 7 10 7 1 8 5 3 8 7 5 3 9 5 4...
output:
10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 ...
result:
ok 10000 numbers
Test #3:
score: 0
Accepted
time: 3ms
memory: 28004kb
input:
100 10 10 5 10 6 4 2 9 9 8 9 10 1 5 7 2 7 4 9 3 6 5 100 4 7 4 5 3 10 7 10 4 10 6 7 3 2 5 2 1 2 10 8 3 1 10 5 6 1 2 4 5 9 6 7 1 8 5 6 7 9 9 8 9 3 6 1 9 10 4 10 1 4 2 7 8 9 9 4 7 9 6 7 9 1 9 6 9 1 4 3 9 6 2 3 9 5 6 7 7 8 8 1 4 8 9 6 8 2 4 5 3 5 4 8 5 10 6 4 8 6 8 7 7 2 3 4 4 8 1 2 3 2 2 10 4 10 3 6 8 ...
output:
10 9 10 10 10 10 10 9 10 10 10 9 10 10 7 10 10 9 8 2 2 10 8 10 10 10 2 8 8 10 8 8 8 10 8 10 7 10 10 10 10 8 10 9 9 10 9 10 10 10 10 10 10 10 10 10 10 10 9 2 8 10 10 10 10 10 10 2 10 10 10 9 8 9 10 8 8 10 10 10 10 10 10 10 10 2 9 9 9 8 9 8 10 10 2 9 10 10 9 10 9 6 7 9 9 9 10 9 5 7 5 10 9 9 9 10 10 6 ...
result:
ok 10000 numbers
Test #4:
score: 0
Accepted
time: 4ms
memory: 24720kb
input:
100 100 100 80 78 78 26 52 35 72 97 81 95 93 15 94 72 43 61 12 78 33 93 61 16 58 88 40 61 96 35 99 19 39 31 56 99 62 26 69 51 70 3 9 94 42 61 32 44 56 89 62 72 90 43 61 24 2 77 39 32 34 20 45 87 73 77 86 69 61 81 57 83 34 82 89 92 25 52 90 97 80 21 46 81 60 72 39 6 59 68 59 17 57 3 63 70 21 89 54 63...
output:
99 94 99 100 100 100 99 96 96 100 100 97 99 2 100 95 77 21 100 99 78 89 98 96 96 100 79 99 100 99 98 100 92 99 98 100 84 97 4 94 75 100 89 100 100 97 96 99 100 96 94 93 100 100 100 78 100 72 88 89 99 81 97 91 99 93 100 92 98 80 93 79 99 96 99 79 94 96 77 21 100 9 100 91 99 99 94 2 99 90 91 94 96 99 ...
result:
ok 10000 numbers
Test #5:
score: 0
Accepted
time: 43ms
memory: 29260kb
input:
100 100 99 63 30 14 58 2 19 76 62 66 13 85 91 89 47 25 35 60 55 4 28 13 7 29 47 30 22 84 76 85 35 37 67 10 13 63 26 80 70 70 73 4 81 90 60 56 44 42 44 46 42 89 95 10 61 84 27 35 69 26 67 47 16 11 78 66 68 45 82 60 80 70 30 96 31 48 60 81 48 96 5 89 96 92 100 96 39 73 78 94 35 33 41 98 27 13 80 84 46...
output:
78 100 86 78 37 99 95 95 95 89 95 100 100 24 38 26 83 100 100 80 2 100 78 93 93 100 98 100 66 98 95 99 97 93 100 95 95 97 95 100 95 96 60 100 86 98 99 99 96 92 93 100 7 100 97 99 84 99 98 98 7 94 97 97 100 97 96 98 100 66 95 92 100 42 99 38 96 94 100 99 96 36 98 90 95 91 91 100 84 99 100 94 99 100 1...
result:
ok 300000 numbers
Test #6:
score: 0
Accepted
time: 255ms
memory: 51680kb
input:
1 200000 200005 143434 88006 153771 154874 66423 170692 146283 6601 155961 164596 168635 18442 76196 80698 111864 77497 161981 64846 118578 76074 68608 192123 96367 47681 140827 119456 23398 117688 167600 79026 117829 18397 187735 145208 47404 38801 76057 195982 181616 66442 131190 175267 78809 1194...
output:
199996 199986 199987 200000 199998 198266 199998 199998 199976 200000 199998 199999 199991 199996 200000 199501 199999 200000 199986 199997 199999 200000 200000 199992 199952 200000 199993 199991 199993 199997 199914 199970 199998 199797 199040 199997 199974 199974 199934 199990 200000 199968 199995...
result:
ok 500000 numbers
Test #7:
score: 0
Accepted
time: 182ms
memory: 89124kb
input:
1 200000 199999 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 5...
output:
48502 122460 3767 146420 86744 28217 16598 5399 54778 83557 17649 10101 112051 18579 28563 113205 82064 10264 162062 162945 142566 85823 133773 113791 32009 88269 35701 34455 3056 45080 130814 123345 129934 18437 17391 18891 5653 47598 31737 71696 62081 29991 164467 66848 2395 109684 115606 61144 86...
result:
ok 500000 numbers
Test #8:
score: 0
Accepted
time: 182ms
memory: 72556kb
input:
1 200000 299998 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 5...
output:
157194 124118 200000 169308 106089 200000 176622 200000 162310 200000 200000 10101 200000 18579 200000 200000 109182 46713 197013 162945 191814 200000 200000 200000 32009 88269 200000 200000 112554 153502 176802 200000 178256 200000 17391 200000 5653 182450 200000 125832 62081 200000 200000 142774 2...
result:
ok 500000 numbers
Test #9:
score: 0
Accepted
time: 3ms
memory: 28332kb
input:
100 20 28 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 1 3 3 5 5 7 7 9 9 11 11 13 13 15 15 17 17 19 100 3 2 13 10 15 5 4 9 15 7 5 10 12 6 17 5 4 5 19 12 7 8 18 10 6 10 1 8 15 14 16 1 14 17 3 7 6 4 11 7 2 10 10 2 2 12 6 11 19 10 7 10 15 6 11 8 2 3 1...
output:
3 13 11 9 9 16 20 13 5 19 14 20 20 20 15 20 17 5 20 5 20 20 20 11 19 14 15 11 3 20 5 7 20 20 14 18 7 3 20 20 11 17 11 7 20 20 20 18 13 8 18 10 5 17 3 20 16 20 20 5 20 9 12 17 9 20 19 9 5 17 9 12 4 16 20 20 3 5 17 13 20 5 20 5 9 20 15 10 20 11 20 20 9 20 19 13 7 20 20 20 20 13 7 20 12 19 9 5 20 11 9 ...
result:
ok 10000 numbers
Test #10:
score: 0
Accepted
time: 141ms
memory: 52588kb
input:
1 200000 199999 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 ...
output:
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 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 ...
result:
ok 500000 numbers
Test #11:
score: 0
Accepted
time: 94ms
memory: 52624kb
input:
1 200000 200000 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 ...
output:
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 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 ...
result:
ok 200005 numbers
Test #12:
score: 0
Accepted
time: 153ms
memory: 52484kb
input:
1 200000 200000 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 ...
output:
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 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 ...
result:
ok 500000 numbers
Test #13:
score: 0
Accepted
time: 63ms
memory: 28076kb
input:
100 2000 2000 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...
output:
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 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 ...
result:
ok 300000 numbers
Test #14:
score: 0
Accepted
time: 5ms
memory: 27452kb
input:
1 5 5 1 2 1 3 2 4 4 5 2 5 5 1 2 1 4 2 3 2 5 3 5
output:
2 4 3 3 5
result:
ok 5 number(s): "2 4 3 3 5"
Test #15:
score: 0
Accepted
time: 0ms
memory: 29196kb
input:
1 2 1 1 2 1 2 1
output:
2
result:
ok 1 number(s): "2"