90pts,#4WA求调
查看原帖
90pts,#4WA求调
1061647
sunny_crane楼主2024/10/13 22:24

代码如下:

#include <iostream>
#include <vector>
#include <queue>
using namespace std;
int n,m,w,a,b,bp[114514],ans;
struct CLOUDE{
	int co,vl,plc;
}cl[114514],cld[114514],qp;
vector<int>con[114514];
queue<CLOUDE>q;
bool f[114514];
int main() {
	cin >>n>>m>>w;
	for(int i=1;i<=n;i++)cin >>cl[i].co >>cl[i].vl ;
	for(int i=1;i<=m;i++){
		cin >>a>>b;
		con[a].push_back(b);
		con[b].push_back(a);
	}
	for(int i=1;i<=n;i++){
		cl[i].plc =i;
		cld[i].plc =i;
	}
	for(int i=1;i<=n;i++){
		qp.co =cl[i].co ,qp.vl =cl[i].vl ,qp.plc =cl[i].plc ,
		q.push(qp);
		for(int j=1;j<=n;j++)f[j]=false;
		while(!q.empty()){
			int cst=q.front().co,val=q.front().vl,pl=q.front().plc;
			q.pop();
			if(f[pl])continue;
			f[pl]=true;
			cld[i].co +=cst;
			cld[i].vl +=val;
			for(int j=0;j<con[pl].size();j++)q.push(cl[con[pl][j]]);
		}
	}
	for(int k=1;k<=n;k++)
		for(int i=w;i>=cld[k].co;i--)
			bp[i]=max(bp[i],bp[i-cld[k].co ]+cld[k].vl );
	ans=bp[1];
	for(int i=2;i<=w;i++)ans=max(ans,bp[i]);
	cout <<ans<<endl;
	return 0;
}
2024/10/13 22:24
加载中...