样例对了,但提交后全是wa或者超时,求助
查看原帖
样例对了,但提交后全是wa或者超时,求助
482889
Cheneyh楼主2021/10/25 16:53

现在知道是树链的板子,但好奇我wa的是为什么错,感谢orz

#include<iostream>
#define maxn 1000000
using namespace std;
long long  head[maxn],nex[maxn],to[maxn],ans[maxn];
long long  head1[maxn],to1[maxn];
long long g[maxn];
long long  tot=0ll,top=0ll,sum=0ll,tot1=0ll;
void add(long long x,long long y)
{
    to[++tot]=y;
    nex[tot]=head[x];
    head[x]=tot;
}
void add1(long long x,long long y)
{
    to1[++tot1]=y;
    head1[x]=tot1;
}
void  op1(long long x,long long a)
{
    g[x]+=a;
}
void  op2(long long x,long long a)
{
    g[x]+=a;
    for(long long i=head[x];i;i=nex[i])
        op2(to[i],a);
}
void op3(long long x)
{
    sum+=g[x];
    if(to1[head1[x]]!=0)
    op3(to1[head1[x]]);
}
int main()
{
    long long n,m;
    cin>>n>>m;
    for(long long  i=1;i<=n;i++)
        cin>>g[i];
    for(long long  i=1,x,y;i<n;i++)
    {
        cin>>x>>y;
        add(x,y);
        add1(y,x);
    }
    for(long long  i=1;i<=m;i++)
    {
        long long a1,a2,a3;
        cin>>a1;
        if(a1==1)
        {
            cin>>a2>>a3;
            op1(a2,a3);
        }
        if(a1==2)
        {
            cin>>a2>>a3;
            op2(a2,a3);
        }
        if(a1==3)
        {
            cin>>a2;
            op3(a2);
            ans[++top]=sum;
            sum=0;
        }
    }
    for(int i=1;i<top;i++)
        cout<<ans[i]<<endl;
    cout<<ans[top];
    return 0;
}

2021/10/25 16:53
加载中...