动态 DP 50pts-70pts WA 看这里
查看原帖
动态 DP 50pts-70pts WA 看这里
815796
zzy0618楼主2024/12/8 11:56

修改时这样是龊的。

    while(m--){
        int u,x,v,y;
        cin>>u>>x>>v>>y;
        mat gu=g[u],gv=g[v];
        g[u].a[1][0]+=(x?-INF:INF)-a[u];
        g[v].a[1][0]+=(y?-INF:INF)-a[v];
        update(u),update(v);
        mat gty=seg.query(1,1,n,dfn[top[1]],pot[top[1]]);
        int ans=max(gty.a[0][0],gty.a[1][0])+(!x)*(-INF+a[u])+(!y)*(-INF+a[v]);
        if(ans<0)cout<<-1<<'\n';
        else cout<<sum-ans<<'\n';
        g[u]=gu,g[v]=gv;
        update(u),update(v);
    }

应该先改一个,记录另一个的状态,再改另一个。改回去是反过来就行了。

    while(m--){
        int u,x,v,y;
        cin>>u>>x>>v>>y;
        mat gu=g[u];g[u].a[1][0]+=(x?-INF:INF)-a[u];update(u);
        mat gv=g[v];g[v].a[1][0]+=(y?-INF:INF)-a[v];update(v);
        mat gty=seg.query(1,1,n,dfn[1],pot[1]);
        int ans=max(gty.a[0][0],gty.a[1][0]);
        cout<<ans<<' ';
        ans+=(!x)*(a[u]-INF)+(!y)*(a[v]-INF);
        if(ans<0)cout<<-1<<'\n';
        else cout<<sum-ans<<'\n';
        g[v]=gv,update(v),g[u]=gu,update(u);
    }
2024/12/8 11:56
加载中...