QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#399286 | #943. Dynamic Diameter | sichengzhou# | 0 | 147ms | 29632kb | C++14 | 5.0kb | 2024-04-26 09:27:24 | 2024-07-04 03:38:24 |
Judging History
answer
#include<bits/stdc++.h>
using namespace std;
bool fl=1,pd=1;
typedef __int128 LL;
const int N=1e5+5;
int n;
priority_queue<LL>q1,q2;
LL t[N<<2],lz[N<<2];
void update(int p)
{
t[p]=max(t[p<<1],t[p<<1|1]);
}
void pushlz(int p,LL z)
{
t[p]+=z;
lz[p]+=z;
}
void lzdown(int p)
{
pushlz(p<<1,lz[p]);
pushlz(p<<1|1,lz[p]);
lz[p]=0;
}
void change(int p,int l,int r,int x,int y,LL z)
{
if(x<=l&&r<=y)
{
pushlz(p,z);
return ;
}
lzdown(p);
int mid=l+r>>1;
if(x<=mid)
{
change(p<<1,l,mid,x,y,z);
}
if(mid+1<=y)
{
change(p<<1|1,mid+1,r,x,y,z);
}
update(p);
}
LL query(int p,int l,int r,int x,int y)
{
if(x<=l&&r<=y)
{
return t[p];
}
int mid=l+r>>1;
LL ret=0;
lzdown(p);
if(x<=mid)
{
ret=max(ret,query(p<<1,l,mid,x,y));
}
if(mid+1<=y)
{
ret=max(ret,query(p<<1|1,mid+1,r,x,y));
}
return ret;
}
struct Edge{
int v,nxt,id;
LL c;
}e[N<<1];
int p[N];
LL edge[N];
int h[N],tot1;
void addEdge(int u,int v,LL c,int id)
{
tot1++;
e[tot1].v=v;e[tot1].nxt=h[u];
e[tot1].c=c;e[tot1].id=id;
h[u]=tot1;
}
int fa[N];
LL len[N];
LL ans,d[N];
void dfs0(int u)
{
LL zd=0,cd=0;
for(int i=h[u];i;i=e[i].nxt)
{
int v=e[i].v;
if(v==fa[u])
{
continue;
}
p[e[i].id]=v;edge[v]=e[i].c;
fa[v]=u;
dfs0(v);
}
}
void add(LL x)
{
// cout<<"add("<<x<<")\n";
q1.push(x);
}
void del(LL x)
{
// cout<<"del("<<x<<")\n";
q2.push(x);
}
LL get_top()
{
// cout<<q1.top()<<'#'<<q2.top()<<endl;
while(!q1.empty()&&!q2.empty()&&q1.top()==q2.top())
{
// cout<<q1.top()<<'^'<<q2.top()<<endl;
q1.pop();q2.pop();
}
// assert(q1.empty()==0);
if(q1.empty())
{
return -1;
}
return q1.top();
}
void calc(int u)
{
d[u]=0;
LL zd=0,cd=0;
del(len[u]);
for(int i=h[u];i;i=e[i].nxt)
{
int v=e[i].v;
if(v==fa[u])
{
continue;
}
d[u]=max(d[u],d[v]+edge[v]);
if(zd<d[v]+edge[v])
{
cd=zd;
zd=d[v]+edge[v];
}else if(cd<d[v]+edge[v])
{
cd=d[v]+edge[v];
}
}
len[u]=zd+cd;
add(zd+cd);
}
void dfs(int u)
{
d[u]=0;
LL zd=0,cd=0;
for(int i=h[u];i;i=e[i].nxt)
{
int v=e[i].v;
if(v==fa[u])
{
continue;
}
fa[v]=u;
dfs(v);
d[u]=max(d[u],d[v]+edge[v]);
if(zd<d[v]+edge[v])
{
cd=zd;
zd=d[v]+edge[v];
}else if(cd<d[v]+edge[v])
{
cd=d[v]+edge[v];
}
}
len[u]=zd+cd;
add(len[u]);
}
LL dep[N];
int dfn[N],idx,sz[N],hd[N];
void dfs1(int u)
{
dfn[u]=++idx;sz[u]=1;
change(1,1,n,dfn[u],dfn[u],dep[u]);
for(int i=h[u];i;i=e[i].nxt)
{
int v=e[i].v;
if(v==fa[u])
{
continue;
}
dep[v]=dep[u]+edge[v];
if(u==1)
{
hd[v]=v;
}else{
hd[v]=hd[u];
}
dfs1(v);
sz[u]+=sz[v];
}
}
int main()
{
int u,v,id,Q;
LL w,c;
scanf("%d%d%lld",&n,&Q,&w);
for(int i=1;i<n;i++)
{
scanf("%d%d%lld",&u,&v,&c);
addEdge(u,v,c,i-1);
addEdge(v,u,c,i-1);
if(u>1&&v>1)
{
fl=0;
}
if(u/2!=v&&v/2!=u)
{
pd=0;
}
}
ans=0;
dfs0(1);
bool fl1=(n>5000&&pd==0);
if(0)
{
for(int i=2;i<=n;i++)
{
q1.push(edge[i]);
}
}else if(fl1){
dfs1(1);
for(int i=h[1];i;i=e[i].nxt)
{
int v=e[i].v;
add(query(1,1,n,dfn[v],dfn[v]+sz[v]-1));
}
}else{
dfs(1);
}
ans=0;
while(Q--)
{
scanf("%d%lld",&id,&c);
id+=ans%(n-1);id%=n-1;
c+=ans%w;c%=w;
if(fl&&0)
{
del(edge[p[id]]);
add(c);
}
if(fl1)
{
int x=hd[p[id]];
del(query(1,1,n,dfn[x],dfn[x]+sz[x]-1));
change(1,1,n,dfn[p[id]],dfn[p[id]]+sz[p[id]]-1,c-edge[p[id]]);
add(query(1,1,n,dfn[x],dfn[x]+sz[x]-1));
}
edge[p[id]]=c;
// cout<<id<<' '<<p[id]<<'*'<<c<<endl;
if(fl1==0){
for(int u=fa[p[id]];u;u=fa[u])
{
calc(u);
}
ans=get_top();
}else{
LL cur=get_top();del(cur);
LL cur1=get_top();
if(cur1==-1)
{
ans=cur;
}else{
ans=cur+cur1;
}
add(cur);
}
printf("%lld\n",(long long)ans);
}
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Subtask #1:
score: 0
Wrong Answer
Test #1:
score: 0
Wrong Answer
time: 1ms
memory: 9972kb
input:
10 100 10000 3 4 115 4 7 2757 1 5 5809 8 5 1111 6 2 7043 6 5 4932 6 4 4171 9 5 8499 10 5 2395 1 3517 8 7196 1 8064 6 7437 6 2421 8 67 7 6695 3 1217 1 920 1 1786 4 2541 5 266 4 6167 0 7590 6 195 8 4087 2 8073 6 8065 5 2882 2 3292 4 3435 6 8447 8 3419 0 9545 1 7922 0 4088 8 2546 4 7071 1 722 6 9178 0 ...
output:
21119 21119 16131 16131 16131 12729 12038 -3206 -3206 -3206 -22478 -9924 -14622 -14622 4650 -5220 -5220 -16194 -16194 -54028 -91719 -114398 -213957 -439480 -439480 -894055 -894055 -894055 -1361996 -1361996 -1825772 -1825772 -3575543 -4723949 -8090610 -14828712 -11934235 -22035486 -22035486 -42239479...
result:
wrong answer 2nd lines differ - expected: '21746', found: '21119'
Subtask #2:
score: 0
Skipped
Dependency #1:
0%
Subtask #3:
score: 0
Wrong Answer
Test #27:
score: 0
Wrong Answer
time: 0ms
memory: 9960kb
input:
20 20 10000 1 2 835 1 3 57 1 4 1883 1 5 1349 1 6 1543 1 7 688 1 8 272 1 9 744 1 10 569 1 11 1019 1 12 201 1 13 1228 1 14 1194 1 15 1123 1 16 48 1 17 164 1 18 893 1 19 963 1 20 818 6 1 0 7412 10 6575 15 6696 0 7412 4 8318 18 7563 15 7502 1 7668 13 7859 14 8045 2 7969 12 8159 11 8040 2 8168 12 8192 0 ...
output:
3426 3426 3426 2005 2005 2005 1451 1451 1451 1451 1451 -1012 -1012 -1012 -3276 -3276 -3276 -3276 -4764 -4764
result:
wrong answer 4th lines differ - expected: '2892', found: '2005'
Subtask #4:
score: 0
Wrong Answer
Test #48:
score: 0
Wrong Answer
time: 2ms
memory: 10084kb
input:
1000 1000 10000 1 2 503 1 3 889 2 4 6 2 5 1468 3 6 102 3 7 464 4 8 658 4 9 1642 5 10 1956 5 11 420 6 12 1287 6 13 1051 7 14 48 7 15 678 8 16 1662 8 17 906 9 18 432 9 19 124 10 20 71 10 21 1624 11 22 268 11 23 1776 12 24 404 12 25 967 13 26 658 13 27 815 14 28 1196 14 29 1920 15 30 865 15 31 1227 16 ...
output:
24077 -70321 -70321 -70321 -70321 -258125 -258125 -538853 -538853 -538853 -538853 -820073 -820073 -1103090 -1103090 -1103090 -1103090 -1103090 -1103090 -1103090 -1103090 -2131209 -2131209 -2131209 -2131209 -2131209 -2131209 -2131209 -2131209 -2131209 -2131209 -2131209 -2131209 -2131209 -3169042 -316...
result:
wrong answer 2nd lines differ - expected: '24129', found: '-70321'
Subtask #5:
score: 0
Wrong Answer
Test #65:
score: 0
Wrong Answer
time: 147ms
memory: 29632kb
input:
100000 100000 20000000000000 36784 60773 140153248 61611 56014 4384507 39699 81699 3960320 64081 33880 136970044 38189 43550 67958946 16177 77482 151567728 90206 77109 108497900 42376 92541 75503161 10148 21587 195080992 11109 80580 11975495 8506 81405 144971319 85501 69547 59675956 72008 46890 3423...
output:
20074364320887 20074364320887 20074364320887 20074364320887 20074364320887 20074364320887 20074364320887 20074364320887 20074364320887 20074364320887 20074364320887 20074364320887 20074364320887 -9899926469607483 -9899926469607483 -9899926469607483 -9899926469607483 -9899926469607483 -98999264696074...
result:
wrong answer 1st lines differ - expected: '20075213641185', found: '20074364320887'
Subtask #6:
score: 0
Skipped
Dependency #1:
0%