博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Codeforces 741B Arpa's weak amphitheater and Mehrdad's valuable Hoses
阅读量:4622 次
发布时间:2019-06-09

本文共 1091 字,大约阅读时间需要 3 分钟。

 

【题目链接】 

 

【题目大意】

  给出一张图,所有连通块构成分组,每个点有价值和代价,

  要么选择整个连通块,要么只能在连通块中选择一个,或者不选,为最大价值

 

【题解】

  首先我们用并查集求出连通块,然后对连通块进行分组背包即可。

 

【代码】

#include 
#include
#include
#include
#define rep(i,n) for(int i=1;i<=n;i++)using namespace std;const int N=1010;int dp[N],f[N],n,m,x,y,size,w[N],b[N];vector
v[N];int sf(int x){return f[x]==x?x:f[x]=sf(f[x]);}int main(){ while(~scanf("%d%d%d",&n,&m,&size)){ rep(i,n)f[i]=i,v[i].clear(); rep(i,n)scanf("%d\n",&w[i]); rep(i,n)scanf("%d\n",&b[i]); rep(i,m){scanf("%d%d",&x,&y);f[sf(x)]=sf(y);} rep(i,n)v[sf(i)].push_back(i); memset(dp,0,sizeof(dp)); rep(i,n)if(sf(i)==i){ for(int j=size;j>=0;j--){ int W=0,B=0; for(int k=0;k
=w[v[i][k]])dp[j]=max(dp[j],dp[j-w[v[i][k]]]+b[v[i][k]]); }if(j>=W)dp[j]=max(dp[j],dp[j-W]+B); } }printf("%d\n",dp[size]); }return 0; }

转载于:https://www.cnblogs.com/forever97/p/Codeforcess741b.html

你可能感兴趣的文章
wc命令
查看>>
CentOS下安装mysql及配置使用
查看>>
gevent拾遗
查看>>
Metro学习笔记+心得+体会(四)
查看>>
正则表达式
查看>>
Codeforces Gym 100342H Problem H. Hard Test 构造题,卡迪杰斯特拉
查看>>
C++源码的调用图生成
查看>>
滚动居中效果_带遮罩效果
查看>>
JSP学习总结(一)
查看>>
Sublime Text3配置Vue 语法
查看>>
验证控件:RegularExpressionValidator
查看>>
hdu1166 线段树单点修改与区间查询
查看>>
asp.net -mvc框架复习(7)-基于MVC搭建用户登录项目框架
查看>>
CSS background-clip 属性
查看>>
Windows下msysGit安装
查看>>
python中函数作用域
查看>>
C#版清晰易懂TCP通信原理解析(附demo)
查看>>
系统自带的粒子系统
查看>>
Laravel 框架的主要版本
查看>>
pandas学习笔记 - 常见的数据处理方式
查看>>