求助
  • 板块P1455 搭配购买
  • 楼主JimmyQ
  • 当前回复0
  • 已保存回复0
  • 发布时间2025/1/4 17:49
  • 上次更新2025/1/4 21:41:49
查看原帖
求助
780971
JimmyQ楼主2025/1/4 17:49
#include<bits/stdc++.h>
using namespace std;
#define N 10005
long long n,m,W,w[N],v[N],fa[N],x,y,dp[N];
long long find(long long x){return x==fa[x]?x:fa[x]=find(fa[x]);}
int main(){
	cin>>n>>m>>W;
	for(int i=1;i<=n;i++){
		cin>>w[i]>>v[i];
		fa[i]=i;
	}
	for(int i=1;i<=m;i++){
		cin>>x>>y;
		if(find(x)==find(y)) continue;
		fa[find(y)]=find(x),w[find(x)]+=w[find(y)],v[find(x)]+=v[find(y)];
	}
	for(int i=1;i<=n;i++){
		if(fa[i]==i){
			for(int j=W;j>=w[i];j--){
				dp[j]=max(dp[j],dp[j-w[i]]+v[i]);
			}
		}
	}
//	for(int i=1;i<=n;i++){
//		cout<<"fa["<<i<<"]="<<fa[i]<<",w["<<i<<"]="<<w[i]<<",v["<<i<<"]="<<v[i]<<endl;
//	}
	cout<<dp[W]<<endl;
	return 0;
} 

样例都没过

2025/1/4 17:49
加载中...