• 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 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;
        }
    }
  • 相关阅读:
    c程序实验报告
    C程序设计实验报告
    第六章 实验报告(函数与宏定义)
    熊承启第五章循环结构实验
    循环结构课后反思
    c语言实验报告
    c语言设计实验报告
    第九章 结构体与共用体
    第八章 指针实验
    数组实验
  • 原文地址:https://www.cnblogs.com/SFWR-YOU/p/11360363.html
Copyright © 2020-2023  润新知