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

搭配购买

时间:2017-08-10 13:38:39      阅读:146      评论:0      收藏:0      [点我收藏+]

标签:max   ret   分享   nbsp   .com   int   节点   width   技术   

洛谷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;
}

 

搭配购买

标签:max   ret   分享   nbsp   .com   int   节点   width   技术   

原文地址:http://www.cnblogs.com/war1111/p/7338561.html

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