求助,并查集+01背包,50分

P1455 搭配购买

@[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


|