#include<cstdio>
int c[10001],n,m,w,d[10001],f[10001],u,v,dp[10005];
int find(int k){
if(k==f[k]) return k;
return f[k]=find(k);
}
int main(){
scanf("%d%d%d",&n,&m,&w);
for(int i=1;i<=n;i++){
f[i]=i;
scanf("%d%d",&c[i],&d[i]);
}
for(int i=1;i<=m;i++){
scanf("%d%d",&u,&v);
f[find(u)]=find(v);
}
for(int i=1;i<=n;i++){
if(f[i]==i) continue;
c[f[i]]+=c[i];
c[i]=0;
d[f[i]]+=d[i];
d[i]=0;
}
for(int i=1;i<=n;i++){
for(int j=w;j>=c[i];j--){
if(dp[j-c[i]]+d[i]>dp[j])
dp[j]=dp[j-c[i]]+d[i];
}
}
printf("%d",dp[w]);
return 0;
}
过了两个点,但是其他点都是MLE,可是我感觉这点数组空间应该是够的,不知道mle的其他原因了。求助!!