1 条题解

  • 0
    @ 2017-10-20 21:07:33

    #include<iostream>
    using namespace std;
    int fa[10020];
    int w[10020],f[10020];
    int v[10020];
    int find(int x)
    {
    if(x!=fa[x]) fa[x]=find(fa[x]);
    return fa[x];

    }
    int unionn(int x,int y)
    {
    int a=find(x);
    int b=find(y);
    fa[a]=b;
    }
    int n,m,val;

    int main()
    {
    //freopen("xu.txt","r",stdin);
    cin>>n>>m>>val;

    for(int i=1;i<=n;i++)
    {
    cin>>w[i]>>v[i];
    fa[i]=i;
    }

    for(int i=1;i<=m;i++)
    {
    int x,y;
    cin>>x>>y;
    int fx=find(x);
    int fy=find(y);
    if(fx!=fy)
    {
    fa[fy]=fa[fx];w[fx]+=w[fy];v[fx]+=v[fy];
    }

    }

    int tot=0;
    for(int i=1;i<=n;i++)
    {
    if(fa[i]==i)
    {
    w[++tot]=w[i];
    v[tot]=v[i];
    }
    }
    for(int i=1;i<=tot;i++)
    for(int j=val;j>=w[i];j--)
    {
    f[j]=max(f[j],f[j-w[i]]+v[i]);
    //cout<<f[j]<<endl;
    }

    cout<<f[val];
    }

  • 1

信息

难度
9
分类
背包动态规划 | 并查集数据结构 点击显示
标签
递交数
4
已通过
4
通过率
100%
被复制
1
上传者