10 pts求调
查看原帖
10 pts求调
1019257
zhaojiawei1234444楼主2024/6/6 18:54

p1455

#include<bits/stdc++.h>
using namespace std;
const int N=10010;
const int M=5010;
int n,m,w;
int c[N],d[N];
int u[M],v[M];
int t[N],jz[N],jq[N],cc[N],dd[N];
int zs,now;
int zz[N];
int f[N];
int find(int x){
	if(f[x]==x) return x;
	return f[x]=find(f[x]);
}
int j[N];
int main(){
	cin>>n>>m>>w;
	for(int i=1;i<=n;i++){
		cin>>c[i]>>d[i];
	}
	for(int i=1;i<=m;i++){
		cin>>u[i]>>v[i];
	}
	for(int i=1;i<=n;i++) f[i]=i;
	for(int i=1;i<=m;i++){
		f[find(u[i])]=find(v[i]);
	}
	for(int i=1;i<=m;i++){
		f[find(u[i])]=find(v[i]);
	}
/*	for(int i=1;i<=n;i++){
		cout<<f[i]<<" ";
	}*/
	for(int i=1;i<=n;i++){
		t[f[i]]++;
		jq[f[i]]+=c[i];
		jz[f[i]]+=d[i];
		if(t[f[i]]!=0) zs++;
	}
	now=1;
/*	for(int i=1;i<=n;i++){
		cout<<t[i]<<" ";
	}*/
	for(int i=1;i<=n;i++){
		if(t[i]!=0){
			cc[now]=jq[i];
			dd[now]=jz[i];
			now++;
		}
	}
/*	for(int i=1;i<=zs;i++){
		cout<<cc[i]<<" ";
	}
	cout<<endl;
	for(int i=1;i<=zs;i++){
		cout<<dd[i]<<" ";
	}*/
	for(int i=1;i<=zs;i++){
		for(int j=w;j>=dd[i];j--){
			f[j]=max(f[j],f[j-dd[i]]+dd[i]);
		}
	}
	cout<<f[w];
	
}
/*

5 3 10 
3 10 
3 10 
3 10 
5 100
10 1 
1 3 
3 2 
4 2 


*/

在线等,很急

2024/6/6 18:54
加载中...