zoukankan      html  css  js  c++  java
  • 搭配购买

    洛谷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;
    }
  • 相关阅读:
    Typecho
    iOS开发
    搭建自己的Git服务器
    Markdown
    微信使用篇
    bzoj2406 矩阵
    POI2010 Bridges
    上下界网络流总结
    TopCoder SRM 582 Div 1
    port命令记录
  • 原文地址:https://www.cnblogs.com/war1111/p/7338561.html
Copyright © 2011-2022 走看看