搭配购买

Posted WeiAR

tags:

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

洛谷P1455 搭配购买

把需要一起购买的物品放到并查集里,每一个并查集的标志是根节点,把v和w都累加,然后对根节点做01背包。

 

#include<bits/stdc++.h>
using namespace std;

int dad[10001],f[10001],v[10001],bag,w[10001];
int n,m;
int ans;

int getfather(int x)
{
    if(dad[x]==x)  return x;
    dad[x]=getfather(dad[x]);
    return dad[x];
}


int main()
{

    cin>>n>>m>>bag;
    for(int i=1;i<=n;i++) dad[i]=i;
    for(int i=1;i<=n;i++) cin>>w[i]>>v[i];
    int x,y;
    while(m--)
    {
          cin>>x>>y;
          int gx=getfather(x),gy=getfather(y);
          if(gx!=gy)
        {
            dad[gx]=gy;
            v[gy]+=v[gx];    
            w[gy]+=w[gx];
        }    
    }
    
    for(int i=1;i<=n;i++)
    {
        if(getfather(i)==i)
        for(int j=bag;j>=w[i];j--)
        f[j]=max(f[j],f[j-w[i]]+v[i]);
    }
    cout<<f[bag];
    return 0;
}

 

以上是关于搭配购买的主要内容,如果未能解决你的问题,请参考以下文章

P1455 搭配购买

P1455 搭配购买

洛谷P1455 搭配购买

策略模式和工厂模式搭配使用

策略模式和工厂模式搭配使用

luogu1455搭配购买