Codeforces Round #383 (Div. 2) D 分组背包
给出一群女孩的重量和颜值 和她们的朋友关系 现在有一个舞台 ab是朋友 bc是朋友 ac就是朋友 给出最大承重 可以邀请这些女孩来玩
对于每一个朋友团体 全邀请or邀请一个or不邀请 问能邀请的女孩的最大颜值
比赛的时候一看就是个背包问题 似乎在背包九讲上面见过..但是不会写
于是百度.."背包 一类选一个"
百度出了分组背包 并且第一个搜索结果就是类似于原题的东西..
只不过分组背包的模板是一个or不要 加了个bfs 把朋友团体作为一个新朋友加入进这个团体 改了改代码..就a了..
虽然fst掉了c...
后来学习了一下 发现分组背包是这样写的
for(int i=1;i<=n;i++)枚举每一个分组
for(int j=V;j>=0;j++)枚举背包容量
for(int k=1;k<=x;k++)枚举i分组里面的所有物品
dp[j] = max(dp[j],dp[j-vol[k]]+val[k]);
当然二维的比较好理解...
在这个题中 并查集和bfs统计朋友团体都可以
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<math.h>
#include<map>
#include<vector>
#include<queue>
#include<malloc.h>
using namespace std;
#define L long long
vector<int >q[1050];
int val[2050];
int vol[2050];
int dp[1050];
int n,m,w;
int id[1050];
vector<int >z[1050];
void bfs(int u,int cnt){
int sumval = 0;
int sumvol = 0;
queue<int>que;
que.push(u);
id[u] = cnt;
sumval += val[u];
sumvol += vol[u];
z[cnt].push_back(u);
while(!que.empty()){
int f=que.front();que.pop();
for(int i=0;i<q[f].size();i++){
int v=q[f][i];
if(id[v] == -1){
z[cnt].push_back(v);
sumval += val[v];
sumvol += vol[v];
id[v] = cnt;
que.push(v);
}
}
}
val[cnt + n] = sumval;
vol[cnt + n] = sumvol;
z[cnt].push_back(n + cnt);
}
int main(){
scanf("%d%d%d",&n,&m,&w);
for(int i=1;i<=n;i++)scanf("%d",&vol[i]);
for(int i=1;i<=n;i++)scanf("%d",&val[i]);
for(int i=1;i<=n;i++)q[i].clear();
memset(id,-1,sizeof(id));
for(int i=1;i<=m;i++){
int u,v;
scanf("%d%d",&u,&v);
q[u].push_back(v);
q[v].push_back(u);
}
int cnt = 0;
for(int i=1;i<=n;i++){
if(id[i] == -1){
cnt ++;
z[cnt].clear();
bfs(i,cnt);
}
}
memset(dp,0,sizeof(dp));
for(int i=1;i<=cnt;i++){
for(int j=w;j>=0;j--){
for(int k=0;k<z[i].size();k++){
int d=z[i][k];
if(j>=vol[d]){
if(dp[j]<dp[j-vol[d]]+val[d]){
dp[j]=dp[j-vol[d]]+val[d];
}
}
}
}
}
printf("%d\n",dp[w]);
}
Codeforces Round #383 (Div. 2) D 分组背包的更多相关文章
- Codeforces Round #383 (Div. 2) 题解【ABCDE】
Codeforces Round #383 (Div. 2) A. Arpa's hard exam and Mehrdad's naive cheat 题意 求1378^n mod 10 题解 直接 ...
- Codeforces Round #383 (Div. 2) A,B,C,D 循环节,标记,暴力,并查集+分组背包
A. Arpa’s hard exam and Mehrdad’s naive cheat time limit per test 1 second memory limit per test 256 ...
- Codeforces Round #383 (Div. 2) D. Arpa's weak amphitheater and Mehrdad's valuable Hoses(分组背包+dsu)
D. Arpa's weak amphitheater and Mehrdad's valuable Hoses Problem Description: Mehrdad wants to invit ...
- Codeforces Round #383(div 2)
A.快速幂 B. 题意:求ai^aj=x的数对个数,x和a[]给定 分析:a^b=c,则a^c=b,所以求ai^x=aj的个数,枚举一遍即可 C. 题意:给你一个有向图,每个点的出边只有一条,求最小的 ...
- Codeforces Round #383 (Div. 2) D. Arpa's weak amphitheater and Mehrdad's valuable Hoses —— DP(01背包)
题目链接:http://codeforces.com/contest/742/problem/D D. Arpa's weak amphitheater and Mehrdad's valuable ...
- Codeforces Round #383 (Div. 2)D. Arpa's weak amphitheater and Mehrdad's valuable Hoses(dp背包+并查集)
题目链接 :http://codeforces.com/contest/742/problem/D 题意:给你n个女人的信息重量w和美丽度b,再给你m个关系,要求邀请的女人总重量不超过w 而且如果邀请 ...
- 01背包dp+并查集 Codeforces Round #383 (Div. 2)
http://codeforces.com/contest/742/problem/D 题目大意:有n个人,每个人有重量wi和魅力值bi.然后又有m对朋友关系,朋友关系是传递的,如果a和b是朋友,b和 ...
- Codeforces Round #383 Div 1题解
第一次打Div 1,感觉还是挺难的..把基础题打完就日常划水了.... [A. Arpa's loud Owf and Mehrdad's evil plan](http://codeforces.c ...
- Codeforces Round #383 (Div. 2) C. Arpa's loud Owf and Mehrdad's evil plan —— DFS找环
题目链接:http://codeforces.com/contest/742/problem/C C. Arpa's loud Owf and Mehrdad's evil plan time lim ...
随机推荐
- linux安装php & nginx
1.安装libxml2 地址:http://ftp.gnome.org/pub/GNOME/sources/libxml2/ wget http://caesar.acc.umu.se/pub/GNO ...
- Git 常用命令合集
$ git init 建立git仓库(一般都是在github上新建好,直接克隆到本地) $ git clone **.git 克隆git仓库 $ git add -A ...
- JS date常用代码积累
Date.prototype.Format = function(fmt) { var o = { "M+" : this.getMonth()+1, //月份 "d+& ...
- sql之left join、right join、inner join的区别
sql之left join.right join.inner join的区别 left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 right join(右联接) 返回包括 ...
- 改写js原装的alert样式
1.将下面的js代码单独到一个js文件中,然后在页面中引用 AlertDialog.js //改写js原装的alert样式 var t; var timeclose = 0; var showBack ...
- AngularJS的JSONP服务
有些页面的response中,包含了 Access-Control-Allow-Origin 这个header,说明可以进行跨域请求,如果没有包含这个header的页面可以利用JSONP进行跨域 sc ...
- TFS二次开发系列:五、工作项查询
本节将讲述如何查询工作项,用于二次开发中定义获取工作项列表. 使用WorkItemStore.Query方法进行查询工作项,其使用的语法和SQL语法类似: Select [标题] from worki ...
- 【Java EE 学习 15】【自定义数据库连接池之动态代理的使用】
一.动态代理的作用 使用动态代理可以拦截一个对象某个方法的执行,并执行自定义的方法,其本质是反射 优点:灵活 缺点:由于其本质是反射,所以执行速度相对要慢一些 二.数据库连接池设计思想 1.为什么要使 ...
- Power BI for Office 365(七) Power BI站点
报表分享是Power BI for Office 365比较关键的一个功能,其中提供的Power BI站点将给这些报表一个安全的"归宿",同时也可以跟任何想要分享的人进行协作--- ...
- CozyRSS开发记录4-抽屉效果订阅列表栏
CozyRSS开发记录4-抽屉效果订阅列表栏 1.LeftDrawerContent实现侧滑菜单 抽屉效果,又有人称做侧滑菜单,在手机和平板应用里也是广泛用到.这里,决定把订阅列表栏用抽屉效果实现,而 ...