zoukankan      html  css  js  c++  java
  • 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;
        }
    }
  • 相关阅读:
    poj3372 Candy Distribution
    poj3270 Cow Sorting
    poj2888 Magic Bracelet
    poj2429 GCD & LCM Inverse
    poj1811 Prime Test
    poj2689 Prime Distance
    【思维】2017多校训练七 HDU6121 Build a tree
    【字符串+BFS】Problem 7. James Bond
    【dfs】codeforces Journey
    【思维+贪心】codeforces Game of the Rows
  • 原文地址:https://www.cnblogs.com/SFWR-YOU/p/11360363.html
Copyright © 2011-2022 走看看