商店里有n朵云,云朵被编号为i12n

,并且每朵云都有一个价值。但一些云朵要搭配来买,  买一朵云则与这朵云有搭配的云都要买。

Joe的钱有限,希望买的价值最大

 

 

#include <iostream>
#include <queue>
#include <algorithm>
using namespace std; 
 const int N= 1e5+5;
 int n,m,V,cost[N],val[N],fa[N];
 int f[N];
 int find(int x){
 	if(x==fa[x]) return x;
 	fa[x]=find(fa[x]);
 	return fa[x];
 }
 void uni(int x,int y){
 	int fx=find(x),fy=find(y);
 	if(fx==fy) return ;
 	fa[fx]=fy;
 	cost[fy]+=cost[fx]; val[fy]+=val[fx];
 }
 signed main(){
 	int i,j,x,y;
 	cin>>n>>m>>V;
 	for(i=1;i<=n;i++) cin>>cost[i]>>val[i];
 	for(i=1;i<=n;i++) fa[i]=i;
 	for(i=1;i<=m;i++) cin>>x>>y,uni(x,y);
 	
 	
 	for(i=1;i<=n;i++) 
 	 if(fa[i]==i){
 		for(j=V;j>=cost[i];j--)
 		 f[j]=max(f[j],f[j-cost[i]]+val[i]);
 	}
 	cout<<f[V];
 }

 

posted on 2023-03-14 12:52  towboat  阅读(16)  评论(0)    收藏  举报