SGU 280.Trade centers(贪心)
SGU 280.Trade centers 解题报告
题意:
n(<=30000)个城市,(n-1)条道路,求最少需要选择多少个城市建造市场,使得所有城市到任意一个市场的距离不大于k。
Solution:
比较好的贪心题。实现起来也有一定技巧。
先以任意点为根,构造出一颗有根树。
首先比较容易想到的是从叶子节点向上寻找,如果只有一个距离为k的点,就把它选上。但是有多个呢?
于是思考更一般的做法,由于是树形结构,先考虑以x节点为根的子树。我们先假设f[x]代表离x节点向下的市场点的距离,这个值可以通过子树的f[]值得出。但是子树有多个f[]我们需要的是哪个呢?
先来考虑x的儿子p,假设f[p]<=k,那么p已经被覆盖,并可能覆盖到x和它的父节点和它的兄弟子树。假设f[p]>k,那么p需要在x或它的父亲中建造市场,要么其实他已经被它的兄弟子树覆盖。这个可以通过判断$max(f[p])+min(f[p])+2$是否小于等于2*k+1来判断。
如果x的子树全部被覆盖了,那么$f[x] = min(f[p])+1$,
如果没有,$f[x]=max(f[p])+1$,并且如果f[x]=2*k+1那么让x成为关键点。即令$f[x]=0$。
注意在根的时候,根节点无法向上,如果f[root]>k说明子树中有节点需要在根节点建造市场。
根据定义叶子节点k应该满足f[k]=k+1。
最后输出f[]为0的节点就行了。
#include <iostream>
#include <cstdio>
#include <vector>
#include <cstring>
using namespace std;
const int INF = 31111;
vector<int> edge[INF], ans;
int f[INF];
int n, k, tol;
int dfs ( int x , int fa )
{
int dmax = -INF, dmin = INF, s = 0;
f[x] = k + 1;
for ( int i = 0; i < edge[x].size(); ++i ) {
int v = edge[x][i];
if ( v == fa ) continue;
++s;
dfs ( v , x );
dmin = min ( f[v], dmin );
dmax = max ( f[v], dmax );
}
if ( s ) {
if ( dmin + dmax + 2 <= 2 * k + 1 ) f[x] = dmin + 1;
else f[x] = dmax + 1;
}
if ( f[x] == 2 * k + 1 ) {
f[x] = 0;
++tol;
}
}
int main()
{
scanf ( "%d %d", &n, &k );
for ( int i = 2, x, y; i <= n; ++i ) {
scanf ( "%d %d", &x, &y );
edge[x].push_back ( y );
edge[y].push_back ( x );
}
dfs ( 1 , 0 );
if ( f[1] > k ) ++tol, f[1] = 0;
printf ( "%d\n", tol );
for ( int i = 1; i <= n; i++ )
if ( f[i] == 0 ) printf ( "%d\n", i );
}
/*
14 3
1 2
1 3
1 4
2 5
2 6
3 7
3 8
4 9
7 10
7 11
10 12
11 13
13 14
answer:
2
1
7
*/
SGU 280.Trade centers(贪心)的更多相关文章
- HDU1009_FatMouse' Trade【贪心】【水题】
FatMouse' Trade Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- [题解]hdu 1009 FatMouse' Trade(贪心基础题)
Problem Description FatMouse prepared M pounds of cat food, ready to trade with the cats guarding th ...
- hdu 1009:FatMouse' Trade(贪心)
FatMouse' Trade Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)T ...
- HDU 1009 FatMouse' Trade (贪心算法)
题意:就是老鼠要用猫粮换粮食,第i个房间一些东西,要用东西去换,可以不全换.问给定的猫粮最多能换多少粮食. 析:贪心算法.我们先算出来每个房间物品的平均价格是多少,肯定越低越好,并且如果能全换就全换, ...
- HDU1009:FatMouse' Trade(初探贪心,wait)
FatMouse prepared M pounds of cat food, ready to trade with the cats guarding the warehouse containi ...
- HDU——1009FatMouse' Trade(贪心+结构体+排序)
FatMouse' Trade Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- 杭电 1009 FatMouse' Trade (贪心)
Problem Description FatMouse prepared M pounds of cat food, ready to trade with the cats guarding th ...
- HDU 1009 FatMouse' Trade【贪心】
解题思路:一只老鼠共有m的猫粮,给出n个房间,每一间房间可以用f[i]的猫粮换取w[i]的豆,问老鼠最多能够获得豆的数量 sum 即每一间房间的豆的单价为v[i]=f[i]/w[i],要想买到最多的豆 ...
- HDU 1009 FatMouse' Trade (贪心)
原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1009 题目大意:肥鼠准备了 磅的猫粮,准备和看管仓库的猫交易,仓库里装有他最喜爱的食物 豆.仓库有 个 ...
随机推荐
- 使用WIF实现单点登录Part III —— 正式实战 -摘自网络
经过前两篇文章,估计大家对WIF已经有比较充分的认识了,估计大家在经过了枯燥的理论以后,肯定是摩拳擦掌赶紧付诸于行动了.没办法,咱们程序员就是这个毛病.那好吧,我也不那么多废话了,直接进入正题吧. 我 ...
- HDU5643-King's Game
BestCoder上的题,直接贴网站上的题目和题解了.很棒的题. 问题描述为了铭记历史,国王准备在阅兵的间隙玩约瑟夫游戏.它召来了 n(1≤n≤5000) 个士兵,逆时针围成一个圈,依次标号 1,2, ...
- jq问题处理
1.同一个事件,点击显示和隐藏 $(document).ready(function(){ $('.container .nav-header').click(function(){ var chan ...
- python学习之元组
#coding:utf-8# __author__ = 'Administrator'#元组:不可变序列 #空元组mm=()print mm#只有一个值的元组mm=(1,)print mmx=1,2, ...
- 大数据与可靠性会碰撞出什么样的Spark?
可靠性工程领域的可靠性评估,可靠性仿真计算,健康检测与预管理(PHM)技术,可靠性试验,都需要大规模数据来进行支撑才能产生好的效果,以往这些数据都是不全并且收集困难,而随着互联网+的大数据时代的来临, ...
- 五、SQL映射的XML文件
MyBatis真正的力量是在映射语句中.这里是奇迹发生的地方.对于所有的力量,SQL映射的XML文件是相当的简单.当然如果你将它们和对等功能的JDBC代码来比较,你会发现映射文件节省了大约95%的代码 ...
- 如何用C#检查硬盘是否是固态硬盘SSD
博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:如何用C#检查硬盘是否是固态硬盘SSD.
- ListBox获取行字符串
ListBox获取行字符串 关键点 获取ListBox第1行的字符串 获取ListBox第2行的字符串 获取ListBox第n行的字符串 CListBox::GetText int GetText( ...
- Nginx下载服务生产服务器调优
一.内存调优 内核关于内存的选项都在/proc/sys/vm目录下. 1.pdflush,用于回写内存中的脏数据到硬盘.可以通过 /proc/sys/vm/vm.dirty_background_ ...
- Building and setting up QT environment for BeagleBone
There are too few information available on how to easily setup QT environment for building Beaglebon ...