#include<bits/stdc++.h>
using namespace std;
const int M=10010;
int a[M],b[M],c[M],d[M],p[M],fat[M],s[M];
int find(int x){
if(fat[x]!=x)return fat[x]=find(fat[x]);
return x;
}
int main(){
int n,m,w,i,j,x,y,l,t1,t2;
scanf("%d%d%d",&n,&m,&w);
for(i=1;i<=n;i++){
scanf("%d%d",&a[i],&b[i]);
fat[i]=i;
}
for(i=1;i<=m;i++){
scanf("%d%d",&x,&y);
t1=find(x);
t2=find(y);
if(t1!=t2)
fat[x]=fat[y];
}
for(i=1;i<=n;i++){
t1=find(i);
if(p[t1]==0)
p[t1]=++l;
c[p[t1]]+=a[i];
d[p[t1]]+=b[i];
}
for(i=1;i<=l;i++)
for(j=w;j>=0;j--)
if(j+c[i]<=w)
s[j+c[i]]=max(s[j+c[i]],s[j]+d[i]);
printf("%d",s[w]);
return 0;
}
一本通训练指导教程P419 搭配购买
最新推荐文章于 2024-03-20 16:06:07 发布