Submission #76277653
Source Code Expand
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+5,mod=998244353;
bool st;
int n,q,dfn[N],fa[N][17],id[N],dep[N],tot,siz[N],son[N],col[N];
vector<int> g[N];
struct sgt{int u,v,dis;}seg[N<<2];
inline void dfs1(int u,int last) {
fa[u][0]=last;dep[u]=dep[last]+1;int maxn=0;siz[u]=1;
for(int i=1;i<=16;i++) fa[u][i]=fa[fa[u][i-1]][i-1];
for(int i=0;i<g[u].size();i++) {
int v=g[u][i];
if(v==last) continue;
dfs1(v,u);
if(maxn<siz[v]) son[u]=v,maxn=siz[v];
siz[u]+=siz[v];
}
}
inline void dfs2(int u) {
dfn[u]=++tot;id[tot]=u;
if(son[u]) dfs2(son[u]);
for(int i=0;i<g[u].size();i++) {
int v=g[u][i];
if(v==fa[u][0]||v==son[u]) continue;
dfs2(v);
}
}
inline int lca(int u,int v) {
if(u==v) return u;
if(dep[u]!=dep[v]) {
if(dep[u]<dep[v]) swap(u,v);
for(int i=16;i>=0;i--) {
if(dep[fa[u][i]]>dep[v]) u=fa[u][i];
}u=fa[u][0];
}
if(u==v) return u;
for(int i=16;i>=0;i--) {
if(fa[u][i]!=fa[v][i]) u=fa[u][i],v=fa[v][i];
}return fa[u][0];
}
inline void push_up(int rt) {
if(seg[rt<<1].dis==-1) {seg[rt]=seg[rt<<1|1];return;}
if(seg[rt<<1|1].dis==-1) {seg[rt]=seg[rt<<1];return;}
int u=seg[rt<<1].u,v=seg[rt<<1].v;
int uu=seg[rt<<1|1].u,vv=seg[rt<<1|1].v;
if(seg[rt<<1].dis>seg[rt<<1|1].dis) seg[rt]=seg[rt<<1];
else seg[rt]=seg[rt<<1|1];
if(-dep[lca(u,vv)]*2+dep[u]+dep[vv]>seg[rt].dis) seg[rt]={u,vv,-dep[lca(u,vv)]*2+dep[u]+dep[vv]};
if(-dep[lca(u,uu)]*2+dep[u]+dep[uu]>seg[rt].dis) seg[rt]={u,uu,-dep[lca(u,uu)]*2+dep[u]+dep[uu]};
if(-dep[lca(uu,v)]*2+dep[uu]+dep[v]>seg[rt].dis) seg[rt]={uu,v,-dep[lca(uu,v)]*2+dep[uu]+dep[v]};
if(-dep[lca(v,vv)]*2+dep[v]+dep[vv]>seg[rt].dis) seg[rt]={v,vv,-dep[lca(v,vv)]*2+dep[v]+dep[vv]};
}
inline void build(int rt,int l,int r) {
if(l==r) {seg[rt]={id[l],id[l],0};return;}
int mid=(l+r)>>1;
build(rt<<1,l,mid);build(rt<<1|1,mid+1,r);
push_up(rt);
}
inline void modify(int rt,int l,int r,int pos,sgt x){
if(l==r) {seg[rt]=x;return;}
int mid=(l+r)>>1;
if(pos<=mid) modify(rt<<1,l,mid,pos,x);
else modify(rt<<1|1,mid+1,r,pos,x);
push_up(rt);
}
bool ed;
signed main() {
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
cerr<<(double)(&st-&ed)/1024/1024<<'\n';
cin>>n;
for(int i=1;i<=n;i++) col[i]=1;
for(int i=1;i<n;i++) {
int u,v;cin>>u>>v;
g[u].push_back(v);
g[v].push_back(u);
}dfs1(1,0);dfs2(1);build(1,1,n);
cin>>q;
for(int i=1;i<=q;i++) {
int x;cin>>x;
if(col[x]) {col[x]=0;modify(1,1,n,dfn[x],{0,0,-1});}
else {col[x]=1,modify(1,1,n,dfn[x],{x,x,0});}
cout<<seg[1].dis<<'\n';
}
return 0;
}
Submission Info
Submission Time
2026-05-30 22:25:50+0900
Task
F - Farthest Pair Query
User
wallacewan
Language
C++23 (GCC 15.2.0)
Score
550
Code Size
2616 Byte
Status
AC
Exec Time
924 ms
Memory
39032 KiB
Compile Error
./Main.cpp: In function 'void dfs1(int, int)':
./Main.cpp:13:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
13 | for(int i=0;i<g[u].size();i++) {
| ~^~~~~~~~~~~~
./Main.cpp: In function 'void dfs2(int)':
./Main.cpp:24:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
24 | for(int i=0;i<g[u].size();i++) {
| ~^~~~~~~~~~~~
Judge Result
Set Name
Sample
All
Score / Max Score
0 / 0
550 / 550
Status
Set Name
Test Cases
Sample
sample00.txt
All
sample00.txt, testcase00.txt, testcase01.txt, testcase02.txt, testcase03.txt, testcase04.txt, testcase05.txt, testcase06.txt, testcase07.txt, testcase08.txt, testcase09.txt, testcase10.txt, testcase11.txt, testcase12.txt, testcase13.txt, testcase14.txt, testcase15.txt, testcase16.txt, testcase17.txt, testcase18.txt, testcase19.txt, testcase20.txt, testcase21.txt, testcase22.txt, testcase23.txt, testcase24.txt, testcase25.txt, testcase26.txt, testcase27.txt, testcase28.txt, testcase29.txt
Case Name
Status
Exec Time
Memory
sample00.txt
AC
5 ms
3952 KiB
testcase00.txt
AC
528 ms
6436 KiB
testcase01.txt
AC
110 ms
4472 KiB
testcase02.txt
AC
163 ms
4588 KiB
testcase03.txt
AC
915 ms
21504 KiB
testcase04.txt
AC
914 ms
21680 KiB
testcase05.txt
AC
924 ms
21452 KiB
testcase06.txt
AC
75 ms
9088 KiB
testcase07.txt
AC
535 ms
39032 KiB
testcase08.txt
AC
127 ms
8940 KiB
testcase09.txt
AC
536 ms
36732 KiB
testcase10.txt
AC
11 ms
4684 KiB
testcase11.txt
AC
323 ms
21212 KiB
testcase12.txt
AC
151 ms
6188 KiB
testcase13.txt
AC
389 ms
21532 KiB
testcase14.txt
AC
151 ms
5112 KiB
testcase15.txt
AC
365 ms
22068 KiB
testcase16.txt
AC
291 ms
33640 KiB
testcase17.txt
AC
134 ms
21244 KiB
testcase18.txt
AC
312 ms
10088 KiB
testcase19.txt
AC
535 ms
37204 KiB
testcase20.txt
AC
404 ms
9960 KiB
testcase21.txt
AC
663 ms
37332 KiB
testcase22.txt
AC
215 ms
5032 KiB
testcase23.txt
AC
355 ms
22120 KiB
testcase24.txt
AC
5 ms
4144 KiB
testcase25.txt
AC
4 ms
3944 KiB
testcase26.txt
AC
146 ms
12628 KiB
testcase27.txt
AC
324 ms
29976 KiB
testcase28.txt
AC
338 ms
26364 KiB
testcase29.txt
AC
300 ms
29516 KiB