UOJ Logo

NOI.AC

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#214617#2376. 树与异或stawalr1003050ms79316kbC++1.5kb2024-11-20 20:47:222024-11-20 23:06:29

answer

#include<cstdio>
#include<iostream>
#define int long long
using namespace std;
const int mn=1e6+5,mod=1e9+7;
int n,q,ans;
int hd[mn],nxt[mn<<1],to[mn<<1],cnt=2;
int f[mn][3],fa[mn],v[mn];
void add(int x,int y)
{
    nxt[cnt]=hd[x];
    to[cnt]=y;
    hd[x]=cnt++;
}
void dfs(int x,int y)
{
    fa[x]=y;
    f[x][2]=f[x][1]=f[x][0]=v[x];
    for(int i=hd[x];i;i=nxt[i])
    {
        int u=to[i];
        if(u==y)continue;
        dfs(u,x);
        f[x][1]^=f[u][0];
        f[x][2]^=f[u][1];
    }
    // cerr<<x<<" "<<f[x][0]<<" "<<f[x][1]<<" "<<f[x][2]<<'\n';
}
int upd(int x,int c)
{
    int res=0;
    int tmp=v[x]^c;
    v[x]=c;
    f[x][0]^=tmp;
    f[x][1]^=tmp;
    f[x][2]^=tmp;
    res^=f[x][2];
    if(fa[fa[x]]!=0)
    {
        f[fa[fa[x]]][2]^=tmp;
        res^=f[fa[fa[x]]][0];
    }
    if(fa[x]!=0)
    {
        f[fa[x]][2]^=tmp;
        f[fa[x]][1]^=tmp;
    // cerr<<res<<'\n';
        res^=f[fa[x]][1];
    // cerr<<res<<'\n';
        res^=f[x][0];
    // cerr<<res<<'\n';
    // cerr<<res<<'\n';
    }
    // cerr<<res<<'\n';
    return res;
}
signed main()
{
    int x,y;
    scanf("%lld%lld",&n,&q);
    for(int i=1;i<=n;i++)
    {
        scanf("%lld",&v[i]);
    }
    for(int i=1;i<n;i++)
    {
        scanf("%lld%lld",&x,&y);
        add(x,y);
        add(y,x);
    }
    dfs(1,0);
    for(int i=1;i<=q;i++)
    {
        scanf("%lld%lld",&x,&y);
        // printf("%d\n",);
        ans+=upd(x,y)*i%mod*i%mod;
        ans%=mod;
    }
    printf("%lld",ans);
    return 0;
}

详细

小提示:点击横条可展开更详细的信息

Test #1:

score: 10
Accepted
time: 1ms
memory: 1284kb

input:

1000 994
780089107 4670366 871010085 73730768 526852049 572589363 885190993 1049357301 450850404 460...

output:

503748432

result:

ok 1 number(s): "503748432"

Test #2:

score: 10
Accepted
time: 0ms
memory: 1288kb

input:

1000 999
26885995 181771373 378079250 245122183 660787775 479226046 575400611 257120086 214404794 48...

output:

301019013

result:

ok 1 number(s): "301019013"

Test #3:

score: 10
Accepted
time: 1ms
memory: 1284kb

input:

1000 994
978408146 31636243 945016735 512129400 92881624 689719983 649699545 964802847 100094796 941...

output:

250985726

result:

ok 1 number(s): "250985726"

Test #4:

score: 10
Accepted
time: 40ms
memory: 9024kb

input:

100000 99994
194640838 777315353 114710204 754050649 372592717 210279787 542056883 638262010 7998293...

output:

897014293

result:

ok 1 number(s): "897014293"

Test #5:

score: 10
Accepted
time: 51ms
memory: 9024kb

input:

100000 100000
458877901 215980825 777376132 863774865 34430451 828397116 94813690 931300514 10548367...

output:

351450518

result:

ok 1 number(s): "351450518"

Test #6:

score: 10
Accepted
time: 62ms
memory: 9020kb

input:

100000 99991
56406146 757409402 876799234 573444553 883023109 326033134 328116703 623771278 41269529...

output:

440189625

result:

ok 1 number(s): "440189625"

Test #7:

score: 10
Accepted
time: 745ms
memory: 79312kb

input:

1000000 999998
814298729 663807029 628693441 45635199 148428014 913833778 1034283337 600802841 58045...

output:

447637970

result:

ok 1 number(s): "447637970"

Test #8:

score: 10
Accepted
time: 773ms
memory: 79316kb

input:

1000000 999993
112899321 425466951 471078924 857561298 449437156 710041336 1033281580 23390934 44420...

output:

449713864

result:

ok 1 number(s): "449713864"

Test #9:

score: 10
Accepted
time: 713ms
memory: 79312kb

input:

1000000 1000000
273043260 1042513348 30746190 864557483 187812119 562837674 263192174 364182254 3537...

output:

922464355

result:

ok 1 number(s): "922464355"

Test #10:

score: 10
Accepted
time: 664ms
memory: 79316kb

input:

1000000 999995
83067658 1064735371 623243759 757522311 539363923 924297206 75317137 543750195 822898...

output:

318242296

result:

ok 1 number(s): "318242296"

Extra Test:

score: 0
Extra Test Passed