求助TLE
查看原帖
求助TLE
577834
wan_yy楼主2023/6/28 23:17

rt,调了一晚上了复杂度应该是对的。不知道哪里出问题了/kel

#include<iostream>
#include<cstring>
#include<vector>
#include<cstdio>
#include<cassert>
#include<queue>
#include<algorithm>
#define ll long long
#define ull unsigned long long
#define mp make_pair
#define pb push_back
#define fi first
#define se second
#define lc(p) (p<<1)
#define rc(p) ((p<<1)|1)
#define klc(p) (tr[p].l)
#define krc(p) (tr[p].r)
using namespace std;
//================================
int T;int w[200005];
vector<int>tr[200005];
int dpmax[200005],dpmin[200005];
int V[200005],K[200005];
void dfs(int u,int fa,int mx,int mn){
    dpmax[u]=max(mx+w[u],0);
    dpmin[u]=min(mn+w[u],0);
    mx=dpmax[u];mn=dpmin[u];
    if(fa!=0)
    dpmax[u]=max(dpmax[u],dpmax[fa]);
    dpmin[u]=min(dpmin[u],dpmin[fa]);
    for(int i:tr[u]){
        if(i!=fa){
            dfs(i,u,mx,mn);
        }
    }
}
signed main(){
#ifdef LOCAL
    freopen("in.in","r",stdin);
    freopen("out.out","w",stdout);
#endif
//================================
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cin>>T;
    while(T--){
        tr[0].pb(1);w[1]=1;
        int idx=1;
        int n;cin>>n;
        int now=0;
        while(n--){
            char p;cin>>p;
            if(p=='+'){
                int v,x;cin>>v>>x;
                tr[v].pb(++idx);
                w[idx]=x;
            }
            else{
                int u,v,k;
                cin>>u>>v>>k;
                V[++now]=v;K[now]=k;        
            }
        }
        dfs(1,0,0,0);
            for(int i=1;i<=now;i++){
                if(K[i]>=dpmin[V[i]]&&K[i]<=dpmax[V[i]])cout<<"YES"<<endl;
                else cout<<"NO"<<endl;
            }
        
        for(int i=1;i<=n;i++)tr[i].clear();
        memset(dpmax,0,sizeof(dpmax));
        memset(dpmin,0,sizeof(dpmin));
    }
//================================
    return 0;
}
2023/6/28 23:17
加载中...