影片連結:C129 並查集+01揹包 P1455 搭配購買_嗶哩嗶哩_bilibili
E08【模板】揹包DP 01揹包_嗶哩嗶哩_bilibili
P1455 搭配購買 - 洛谷 | 電腦科學教育新生態 (luogu.com.cn)
// 並查集+01揹包 #include <iostream> #include <cstring> #include <algorithm> using namespace std; const int N=10005; int n,m,V; int p[N]; int v[N],w[N],f[N]; int find(int x){ return p[x]==x?x:p[x]=find(p[x]); } int main(){ ios::sync_with_stdio(0); cin>>n>>m>>V; for(int i=1;i<=n;i++){ //n個物品 cin>>v[i]>>w[i]; //體積和價值 p[i]=i; } for(int i=1;i<=m;i++){ //m個搭配 int x,y;cin>>x>>y; x=find(x),y=find(y); if(x!=y){ p[x]=y; v[y]+=v[x]; //捆綁的體積 w[y]+=w[x]; //捆綁的價值 } } for(int i=1;i<=n;i++) //物品 if(p[i]==i) //物品為根 for(int j=V;j>=v[i];j--) //體積 f[j]=max(f[j],f[j-v[i]]+w[i]); cout<<f[V]; }