@[lutaoquan2012](/user/952033) 合并弄错了
你 hb 里写的 y1 是 x1 的祖先,到了合并长度和价值时候变成 x1 是 y1 的祖先了
```cpp
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n,m,w,u[10010],v[10010],fa[10010],x,y,dp[10010];
ll find(ll x){
if(fa[x]==x) return x;
return fa[x]=find(fa[x]);
}
void hb(ll x,ll y){
ll x1=find(x),y1=find(y);
fa[y1]=x1;
u[x1] += u[y1];
v[x1] += v[y1];
}
int main(){
scanf("%lld%lld%lld",&n,&m,&w);
for(int i=1;i<=n;i++) fa[i]=i;
for(int i=1;i<=n;i++) scanf("%lld%lld",&u[i],&v[i]);
for(int i=1;i<=m;i++){
scanf("%lld%lld",&x,&y);
if(find(x)!=find(y)){
hb(x,y);
}
}
// for(int i=1;i<=n;i++){
// if(fa[i]==i) cout<<u[i]<<" "<<v[i]<<endl;
// }
for(int i=1;i<=n;i++){
if(fa[i]==i){
for(int j=w;j>=u[i];j--)
dp[j]=max(dp[j],dp[j-u[i]]+v[i]);
}
}
printf("%lld",dp[w]);
return 0;
}
```
by Loser_Syx @ 2023-06-22 11:19:26
谢谢大佬,知道错哪里了
by lutaoquan2012 @ 2023-06-22 11:34:21
已关
by lutaoquan2012 @ 2023-06-22 11:35:51