#include<stdio.h>
#include<algorithm>
#define go(i,a,b) for(int i=a;i<=b;i++)
#define ro(i,a,b) for(int i=a;i>=b;i--)
const int N=10003;int n,m,W,w[N],v[N],fa[N],f[20000003];
int find(int x){return x==fa[x]?x:fa[x]=find(fa[x]);}
int main()
{
scanf("%d%d%d",&n,&m,&W);
go(i,1,n)scanf("%d%d",w+i,v+i),fa[i]=i;
go(i,1,m){int a,b,A,B;scanf("%d%d",&a,&b);
if((A=find(a))==(B=find(b)))continue;
fa[B]=A;v[A]+=v[B];w[A]+=w[B];}
go(i,1,n)if(fa[i]==i){
ro(j,W,w[i])f[j]=std::max(f[j],f[j-w[i]]+v[i]);}
printf("%d",f[W]);return 0;
}//Paul_Guderian
P1455 搭配购买【并查集+背包】
最新推荐文章于 2024-04-07 19:27:06 发布