QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#399286#943. Dynamic Diametersichengzhou#0 147ms29632kbC++145.0kb2024-04-26 09:27:242024-07-04 03:38:24

Judging History

This is the latest submission verdict.

  • [2024-07-04 03:38:24]
  • Judged
  • Verdict: 0
  • Time: 147ms
  • Memory: 29632kb
  • [2024-04-26 09:27:24]
  • Submitted

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;
}

详细

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%