WA的#5,不知道为什么错了。求助。
#include<iostream>
#include<cmath>
using namespace std;
typedef long long ll;
const ll N=1e4+10;
ll n,m,w;
ll f[N],val[N],dp[N],s[N];
int find(int k){
if(f[k]==k) return k;
return f[k]=find(f[k]);
}
void hb(int x,int y){
x=find(x),y=find(y);
if(x==y) return ;
f[y]=x;
val[x]+=val[y];
s[x]+=s[y];
}
int main(){
cin>>n>>m>>w;
for(int i=1;i<=n;i++)
cin>>s[i]>>val[i],f[i]=i;
for(int i=1;i<=m;i++){
int a,b;
cin>>a>>b;
hb(a,b);
}
for(int i=1;i<=n;i++)
for(int j=w;j>=s[find(i)];j--)
dp[j]=max(dp[j],dp[j-s[find(i)]]+val[find(i)]);
cout<<dp[w];
return 0;
}