P5024 保卫王国

Posted sfwr-you

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了P5024 保卫王国相关的知识,希望对你有一定的参考价值。

技术图片

——————————————————————————————————————————————-

考前练习打打部分分

设置权值这个方法需要记住

————————————————————————————————————————————————————

PT:44

————

#include<bits/stdc++.h>
using namespace std;
const int inf=1000000000;
char ch[5];
int n,m,head[101000],ne,a,b,c,d,val[101000],flg[101000],mp[2100][2100];
int f[101000][3];
struct nodeint to,nxt;eg[101000];
void adde(int u,int v)

    eg[++ne].to=v;
    eg[ne].nxt=head[u];
    head[u]=ne;

void dfs(int u,int fa)

    for(int i=head[u];i;i=eg[i].nxt)
        if(eg[i].to!=fa)
        
            dfs(eg[i].to,u);
            int v=eg[i].to;
            f[u][1]+=min(f[eg[i].to][1],f[eg[i].to][0]);
            f[u][0]+=f[eg[i].to][1];
        
    f[u][1]+=val[u];

int main()

    //freopen("defense.in","r",stdin);
    //freopen("defense.out","w",stdout);
    cin>>n>>m>>ch;
    for(int i=1;i<=n;i++)cin>>val[i];
    for(int i=1;i<n;i++)cin>>a>>b;adde(a,b);adde(b,a);
    while(m--)
    
        memset(f,0,sizeof(f));
        cin>>a>>b>>c>>d;
        int ans=0;
        int p1=val[a],p2=val[c];
        if(!b)val[a]=inf;
        else ans+=p1;val[a]=0;
        if(!d)val[c]=inf;
        else ans+=p2;val[c]=0;    
        dfs(1,0);
        if(min(f[1][1],f[1][0])>=inf)cout<<-1<<endl;
        else cout<<ans+min(f[1][1],f[1][0])<<endl;
        val[a]=p1;
        val[c]=p2;
    

 

以上是关于P5024 保卫王国的主要内容,如果未能解决你的问题,请参考以下文章

P5024 保卫王国(动态dp/整体dp/倍增dp)

[luogu 5024] 保卫王国

noip2018 d2t3 保卫王国 解题报告

noip2018luogu5024保卫王国

远古守卫/cocos2d-x 源代码/塔防游戏/高仿王国保卫战

LuoguP5024 保卫王国(动态DP,树形DP,矩阵加速,LCT)