WA70求助
  • 板块P1455 搭配购买
  • 楼主shx2011
  • 当前回复2
  • 已保存回复2
  • 发布时间2024/12/20 18:06
  • 上次更新2024/12/20 21:20:28
查看原帖
WA70求助
1071426
shx2011楼主2024/12/20 18:06

WA on #2 #3 #5

#include<bits/stdc++.h>
using namespace std;
int n,m,w1,v1,u;
int fa[10010],w[10010],v[10010],dp[10010];
int find(int x){
	if(fa[x]==x) return x;
	else return fa[x]=find(fa[x]);
}

void merge(int x,int y){
	int fx,fy;
	fx=find(x);
	fy=find(y);
	if(fx!=fy) fa[fx]=fy;
}
int main(){
	cin>>n>>m>>w1;
	for(int i=1;i<=n;i++){
		fa[i]=i;
	}

	for(int i=1;i<=n;i++){
		cin>>w[i]>>v[i];
	}

	for(int i=1;i<=m;i++){
		cin>>u>>v1;
		merge(u,v1);
	}

	for(int i=1;i<=n;i++){
		if(fa[i]!=i){
			w[fa[i]]=w[fa[i]]+w[i];
			v[fa[i]]=v[fa[i]]+v[i];
			w[i]=0;
			v[i]=0;
		}

	}

	for(int i=1;i<=n;i++){
		if(w[i]==0 && v[i]==0) continue;
		for(int j=w1;j>=w[i];j--){
			dp[j]=max(dp[j],dp[j-w[i]]+v[i]);
		}
	}

	cout<<dp[w1];
	return 0;
}

2024/12/20 18:06
加载中...