zoukankan      html  css  js  c++  java
  • 【洛谷 1455】搭配购买

    题目描述:
    明天就是母亲节了,电脑组的小朋友们在忙碌的课业之余挖空心思想着该送什么礼物来表达自己的心意呢?听说在某个网站上有卖云朵的,小朋友们决定一同前往去看看这种神奇的商品,这个店里有n朵云,云朵已经被老板编号为1,2,3,……,n,并且每朵云都有一个价值,但是商店的老板是个很奇怪的人,他会告诉你一些云朵要搭配起来买才卖,也就是说买一朵云则与这朵云有搭配的云都要买,电脑组的你觉得这礼物实在是太新奇了,但是你的钱是有限的,所以你肯定是想用现有的钱买到尽量多价值的云。
    输入格式:
    第1行n,m,w,表示n朵云,m个搭配和你现有的钱的数目
    第2行至n+1行,每行ci,di表示i朵云的价钱和价值
    第n+2至n+1+m ,每行ui,vi表示买ui就必须买vi,同理,如果买vi就必须买ui【n<=10000;0<=m<=5000;w<=10000.】
    输出格式:
    一行,表示可以获得的最大价值
    输入样例:
    5 3 10
    3 10
    3 10
    3 10
    5 100
    10 1
    1 3
    3 2
    4 2

    输出样例:
    1

    题解:
    Step1:并查集+DP(dp十分经典的背包问题)——无向图
    Step2:把每组绑定的云朵看成一个点,有一个共同的祖先,这时,就成了一个并查集。例如例题中1234这4个点就成了一个并查集;
    Step3:一开始的fa[i]=i;自己的祖先就是自己[更多细节详见代码]               
    Step4:为什么会买白云呢……

    #include<bits/stdc++.h>
    using namespace std;
    int fa[20005],c[20005],w[20005],f[20005];
    int n,m,k,x,y;
    int find(int x) {
        if (x!=fa[x]) fa[x] = find(fa[x]);
        return fa[x];
    }
    int main(){
        freopen("1455.in","r",stdin);
        freopen("1455.out","w",stdout);
        scanf("%d %d %d",&n,&m,&k);
        for(int i=1;i<=n;i++){
            scanf("%d%d",&w[i],&c[i]);
            fa[i]=i;  
        } 
        for(int i=1;i<=m;i++){
            scanf("%d %d",&x,&y);
            int p1=find(x);
            int p2=find(y);
            if(p1!=p2) fa[p2]=p1; 
        }
        for(int i=1;i<=n;i++)
            if(fa[i]!=i){
                int p=find(i);
                c[p]+=c[i];
                w[p]+=w[i]; 
                c[i]=w[i]=0; 
         }
        for(int i=1;i<=n;i++)
            for(int j=k;j>=w[i];j--)
                f[j]=max(f[j],f[j-w[i]]+c[i]); 
        printf("%d
    ",f[k]);
        return 0;
    }
  • 相关阅读:
    一个好的时间函数
    Codeforces 785E. Anton and Permutation
    Codeforces 785 D. Anton and School
    Codeforces 510 E. Fox And Dinner
    Codeforces 242 E. XOR on Segment
    Codeforces 629 E. Famil Door and Roads
    Codeforces 600E. Lomsat gelral(Dsu on tree学习)
    Codeforces 438D The Child and Sequence
    Codeforces 729E Subordinates
    【ATcoder】D
  • 原文地址:https://www.cnblogs.com/wuhu-JJJ/p/11138171.html
Copyright © 2011-2022 走看看