2014百度之星 Party
Party
Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 0 Accepted Submission(s): 0
现在,B公司准备举办一次盛大的聚会,公司希望员工通过这次聚会获得尽可能多的快乐值。第i个员工的快乐值是一个大于0不大于100的整数,如果他参加聚餐,他就会获得的快乐值,如果他的对手参加聚餐,他的快乐值就为0。
但老板在安排聚餐时不知道如何解决这个问题,因此,他找到你帮忙计算这次聚会最多可以带来多少快乐值。
每组数据的第一行包括一个整数N,表示共有N个员工。(约有500组数据N不大于500,约有10组数据N不大于100000)
第二行是N个用空格隔开的整数,第i个整数表示第i个员工的对手的编号。数据保证 xi ∈ [1,N], 且 xi <> i .
第三行也包含N个用空格隔开的整数,表示第i个员工能够获得的快乐值ai。
8
2 7 1 8 4 2 3 5
50 30 40 40 50 10 70 60
190
在样例中,应选择1、6、7、8号员工。
max(dp[0], dp[1]);而每个连通子图的最优解是max(max_value1,max_value2)
解题代码:
#include<iostream>
#include<stdlib.h>
#include<string.h>
#include<algorithm>
#include<stdio.h>
#include<vector>
#include<queue> using namespace std; const int N = ; int val[N],ru[N],vis[N],res[N][];
vector<int>edge[N];
queue<int>que; int main()
{
int T = ;
int csnum;
scanf("%d",&csnum);
for(int cs=;cs<=csnum;cs++)
{
int n;
scanf("%d",&n); for(int i=;i<=n;i++)
{
edge.clear();
ru=;
vis=;
}
while(que.empty()==false)
que.pop(); for(int i=;i<=n;i++)
{
int a;
scanf("%d",&a);
edge.push_back(a);
edge[a].push_back(i);
ru++;ru[a]++;
}
for(int i=;i<=n;i++)
{
scanf("%d",&val);
res[]=val;
res[]=;
} for(int i=;i<=n;i++)
{
if(ru==)
que.push(i);
} while(que.empty()==false)
{
int x=que.front();
que.pop();
vis[x]=;
for(int i=;i<edge[x].size();i++)
{
int y=edge[x];
if(vis[y]==)
{
ru[y]--;
if(ru[y]==)
que.push(y); res[y][]+=res[x][];
res[y][]+=max(res[x][],res[x][]);
}
}
} int ans=;
for(int i=;i<=n;i++)
{
if(vis==)
{
int rs[][];
rs[][]=rs[][]=rs[][]=res[];
rs[][]=res[];
int pre=i;
vis=; do{
int x=-;
for(int j=;j<edge[pre].size();j++)
{
x=edge[pre][j];
if(vis[x]==)
break;
}
// printf("%d-%d ",pre,x);
// puts("");
if(vis[x]==)
break;
vis[x]=; int nrs[][];
for(int u=;u<;u++)
{
nrs[]=max(rs[],rs[])+res[x][];
nrs[]=rs[]+max(res[x][],res[x][]);
}
for(int u=;u<;u++)
for(int v=;v<;v++)
rs[v]=nrs[v];
pre=x;
}while(true); int a=max(rs[][],rs[][]);
int b=rs[][];
ans+=max(a,b);
// printf("%d %d\n",i,max(a,b));
}
}
printf("Case #%d:\n%d\n", T++, ans);
}
return ;
}
2014百度之星 Party的更多相关文章
- 2014百度之星预赛(第二场)——Best Financing
2014百度之星预赛(第二场)--Best Financing Problem Description 小A想通过合理投资银行理財产品达到收益最大化.已知小A在未来一段时间中的收入情况,描写叙述为两个 ...
- 2014百度之星资格赛——Disk Schedule
2014百度拥有明星格比赛--Disk Schedule Problem Description 有非常多从磁盘读取数据的需求,包含顺序读取.随机读取. 为了提高效率.须要人为安排磁盘读取. 然而.在 ...
- 2014百度之星初赛第二场hdu 4831 Scenic Popularity
Scenic Popularity Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others ...
- 2014 百度之星 题解 1004 Labyrinth
Problem Description 度度熊是一仅仅喜欢探险的熊,一次偶然落进了一个m*n矩阵的迷宫,该迷宫仅仅能从矩阵左上角第一个方格開始走,仅仅有走到右上角的第一个格子才算走出迷宫,每一次仅仅能 ...
- 2014百度之星资格赛 1004:Labyrinth(DP)
Labyrinth Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- 2014百度之星资格赛 1001:Energy Conversion(水题,逻辑题)
Energy Conversion Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others ...
- 2014 百度之星题解 1002 - Disk Schedule
Problem Description 有非常多从磁盘读取数据的需求,包含顺序读取.随机读取.为了提高效率,须要人为安排磁盘读取.然而,在现实中,这样的做法非常复杂.我们考虑一个相对简单的场景. 磁盘 ...
- 2014百度之星第四题Labyrinth(DP)
Labyrinth Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- 2014百度之星第三题Xor Sum(字典树+异或运算)
Xor Sum Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 132768/132768 K (Java/Others) Total ...
- HDU4828 Grids 2014百度之星预赛问题解决
看看Catalan数的公式:为 Catalan(n) = C(2n, n) / n+1 = C(2n, n) - C(2n, n-1); (公式0) 然后利用全排序表达:Catalan(n) = (2 ...
随机推荐
- webapi 返回类型
参考 大神;https://www.cnblogs.com/landeanfen/p/5501487.html
- SpringBoot健康检查实现原理
相信看完之前文章的同学都知道了SpringBoot自动装配的套路了,直接看spring.factories文件,当我们使用的时候只需要引入如下依赖 <dependency> <gro ...
- 安装MySQL-8.0.13
安装1.去官网下载对应的MySQL版本http://downloads.mysql.com/archives/community/ 2.将下载下来的MySQL解压到你想要安装的目录下安装MySQL8. ...
- Linq实现字符串拼接多条件查询
Linq实现字符串拼接多条件查询 开发过程中,为提升用户体验,经常会使用到多条件查询,本篇博客介绍如何使用Linq实现字符串拼接多条件查询 一般SQL字符串拼接 1 string sql = &quo ...
- Linux从入门到放弃、零基础入门Linux(第四篇):在虚拟机vmware中安装centos7.7
如果是新手,建议安装带图形化界面的centos,这里以安装centos7.7的64位为例 一.下载系统镜像 镜像文件下载链接https://wiki.centos.org/Download 阿里云官网 ...
- NI CWGraph 显示波形图
ptrWaveBox.Axes(1).Maximum = 1000 ptrWaveBox.Axes(2).Maximum = 20 ptrWaveBox.Axes(2).Minimum = 0 Dim ...
- java mybatis Column 'AAA' in where clause is ambiguous
今天在java mybatis项目中遇到一个问题,“java mybatis Column 'AAA' in where clause is ambiguous”, 这是由于在多表连接查询的时候,遇上 ...
- springboot搭建dubbo+zookeeper简单案例
背景:只是自己使用单机版zookeeper搭建dubbo的一个学习案例,记录成功的过程 1.搭建zookeeper坏境 使用docker来构建环境 1.1 拉取镜像:docker pull zooke ...
- 解决samba共享虚拟机第二块磁盘的难题
linux下使用samba共享文件到window下已经实现过了 点此链接 但是共享时磁盘空间是有限的,如果空间使用完了该怎么处理呢?这是个头疼的问题,不知道samba支持不支持共享第二个文件夹,由 ...
- error: Libtool library used but 'LIBTOOL' is undefined
编译时出现: error: Libtool library used but ‘LIBTOOL’ is undefined 参考了一下: http://stackoverflow.com/questi ...