Facebook Hacker Cup 2015 Round 1--Corporate Gifting(树动态规划)
原标题:https://www.facebook.com/hackercup/problems.php?pid=759650454070547&round=344496159068801
题意:给定一颗有根树,在树上下层的节点要给上层节点礼物,根节点的礼物则给慈善会,可是给礼物有个条件就是你不能送你的父节点已经送出的礼物。问满足要求的最少花费。
题解:这个题卡了一段时间,相似于染色问题,能够用树形动态规划求解。由于已知节点个数为N,则我们单个节点的最大花费不会超过log2(N) = 18。
1. 设dp[i][j]是在i节点花费j时以i为根节点的子树所须要的总开销。
2. 则dp[i][j] = sum{min{dp[son][k],1 <= k <= 18且k != j},son为i的每一个子节点};
比赛的时候一開始使用DFS,没注意到节点规模在树成链状时会导致暴栈。可是时间已经来不及了,非常遗憾没有进入round 2。
代码例如以下:
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
#include<queue>
using namespace std;
#define maxN 200005
#define maxM 18
vector<vector<int> > sons;
int N;
int minCost[maxN][maxM];
struct node
{
int ID;
int depth;
friend bool operator< (node x,node y)
{
return x.depth > y.depth;
}
}employee[maxN];
int BFS()
{
for(int i = 1;i <= N;i++)
{
employee[i].ID = i;
}
employee[1].depth = 0;
int now,next;
int sonSize;
queue<int> q;
q.push(1);
while(!q.empty())
{
now = q.front();
q.pop();
sonSize = sons[now].size();
for(int i = 0;i < sonSize;i++)
{
next = sons[now][i];
q.push(next);
employee[next].depth = employee[now].depth+1;
}
}
}
int dp()
{
int fa,son,sonSize;
int i,j,k,m;
int tmpMinCost;
BFS();
sort(employee+1,employee+N+1);
for(i = 1;i <= N;i++)
{
fa = employee[i].ID;
sonSize = sons[fa].size();
for(j = 1;j <= maxM;j++)
{
minCost[fa][j] = j;
for(k = 0;k < sonSize;k++)
{
son = sons[fa][k];
tmpMinCost = INT_MAX;
for(int m = 1;m <= maxM;m++)
{
if(m == j)
continue;
tmpMinCost = min(tmpMinCost,minCost[son][m]);
}
minCost[fa][j] += tmpMinCost;
}
}
}
int ans = INT_MAX;
for(i = 1;i <= maxM;i++)
{
ans = min(ans,minCost[1][i]);
}
return ans;
}
int main()
{
freopen("corporate_gifting.txt","r",stdin);
freopen("out.txt","w",stdout);
int T;
int fa;
scanf("%d",&T);
for(int i = 1;i <= T;i++)
{
scanf("%d",&N);
vector<vector<int> >().swap(sons);
sons.resize(N+1);
for(int j = 1;j <= N;j++)
{
scanf("%d",&fa);
sons[fa].push_back(j);
}
printf("Case #%d; %d\n",i,dp());
}
return 0;
}
版权声明:本文博主原创文章,博客,未经同意不得转载。
Facebook Hacker Cup 2015 Round 1--Corporate Gifting(树动态规划)的更多相关文章
- Facebook Hacker Cup 2015 Round 1--Winning at Sports(动态规划)
原题:pid=688426044611322&round=344496159068801">https://www.facebook.com/hackercup/problem ...
- Facebook Hacker Cup 2015 Round 1--Homework(筛选法求素数)
题意:给定A,B,K(A<=B)三个数,问在[A,B]范围内的数素数因子个数为K的个数. 题解:典型的筛选法求素数.首先建立一个保存素数因子个数的数组factorNum[],以及到n为止含有素数 ...
- Facebook Hacker Cup 2014 Qualification Round 竞赛试题 Square Detector 解题报告
Facebook Hacker Cup 2014 Qualification Round比赛Square Detector题的解题报告.单击这里打开题目链接(国内访问需要那个,你懂的). 原题如下: ...
- 51Nod 1182 完美字符串(字符串处理 贪心 Facebook Hacker Cup选拔)
1182 完美字符串 题目来源: Facebook Hacker Cup选拔 基准时间限制:1 秒 空间限制:1 ...
- Codeforces Round VK Cup 2015 - Round 1 (unofficial online mirror, Div. 1 only)E. The Art of Dealing with ATM 暴力出奇迹!
VK Cup 2015 - Round 1 (unofficial online mirror, Div. 1 only)E. The Art of Dealing with ATM Time Lim ...
- Facebook Hacker Cup 2014 Qualification Round
2014 Qualification Round Solutions 2013年11月25日下午 1:34 ...最简单的一题又有bug...自以为是真是很厉害! 1. Square Detector ...
- VK Cup 2015 - Round 2 (unofficial online mirror, Div. 1 only) E. Correcting Mistakes 水题
E. Correcting Mistakes Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/problemset ...
- VK Cup 2015 - Round 1 -E. Rooks and Rectangles 线段树最值+扫描线
题意: n * m的棋盘, k个位置有"rook"(车),q次询问,问是否询问的方块内是否每一行都有一个车或者每一列都有一个车? 满足一个即可 先考虑第一种情况, 第二种类似,sw ...
- VK Cup 2015 - Round 2 (unofficial online mirror, Div. 1 only) B. Work Group 树形dp
题目链接: http://codeforces.com/problemset/problem/533/B B. Work Group time limit per test2 secondsmemor ...
随机推荐
- JVM内存配置详解(转)
前段时间在一个项目的性能测试中又发生了一次OOM(Out of swap sapce),情形和以前网店版的那次差不多,比上次更奇怪的是,此次搞了几天之后啥都没调整系统就自动好了,死活没法再重现之前的O ...
- 浅析点对点(End-to-End)的场景文字识别(图片文字)
一.背景 随着智能手机的广泛普及和移动互联网的迅速发展,通过手机等移动终端的摄像头获取.检索和分享资讯已经逐步成为一种生活方式.基于摄像头的 (Camera-based)的应用更加强调对拍摄场景的理解 ...
- Config File Settings Of EF——实体框架的配置文件设置
我亦MSDN 原文地址 http://msdn.microsoft.com/en-us/data/jj556606 Entity Framework allows a number of settin ...
- achieve aop through xml
The main way to achive AOP is deploying a xml file. Now a xml file is presented to be a explanation ...
- <xliff:g>标签
摘要: 这是Android4.3Mms源代码中的strings.xml的一段代码: <!--Settings item desciption for integer auto-delete sm ...
- C#关于ref与out的总结
原文:C#关于ref与out的总结 首先大概说下函数调用的过程,首先为被调用函数分配存储空间(分为代码区和变量区)之后将调用函数传递过来的变量压栈,然后逐一弹栈进行处理,之后进行运算,将需要返回的变量 ...
- Visual Prolog 的 Web 专家系统 (8)
GENI核心 -- 推理引擎(2)流量控制 1.阐述fail."!"而回溯 与其他语言相比,,Prolog最大的特点.这是回溯机制. 回溯机制,还有的主要手段2个月,首先,通过使用 ...
- poj1236(强连通缩点)
传送门:Network of Schools 题意:一些学校联接在一个计算机网络上,学校之间存在软件支援协议,每个学校都有它应支援的学校名单(A学校支援学校B,并不表示B学校一定支援学校A).当某校获 ...
- 你属于几K(千)?
月薪2k.对出勤率负责:5k,对按时完毕率负责:8k,对质量负责:12k.对小团队的情绪负责:16k,对到款率负责:20k,要想着怎么保住自己的饭碗.40k.保住部门.100k.保住大部门:100k+ ...
- 怎样通过git协作开发
近期iOS群里的一些小伙伴刚刚毕业,刚參加工作的小伙伴们,对于怎样进行git下的一个写作开发抱有较大的疑惑.今天小汤我就给大家分享个git下协作开发的小技巧. 怎样通过git协作开发? 当两个开发人员 ...