码迷,mamicode.com
首页 > 其他好文 > 详细

P5024 保卫王国

时间:2019-08-15 21:12:06      阅读:88      评论:0      收藏:0      [点我收藏+]

标签:ace   com   memset   open   image   while   img   png   har   

技术图片

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

考前练习打打部分分

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

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

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 node{int 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 保卫王国

标签:ace   com   memset   open   image   while   img   png   har   

原文地址:https://www.cnblogs.com/SFWR-YOU/p/11360363.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!