Description

Foreseeable和拿破仑的御用建筑师让·夏格伦在玩游戏

让·夏格伦会玩一个叫“凯旋门”的游戏:现在有一棵n个节点的树,表示一个国家 1号点代表这个国家的首都 这个游戏由两个人一起玩 一个玩家扮演视察国家的国王,另一个扮演建立凯旋门的建筑师 一开始只有首都有凯旋门 国王每次会从当前所在城市移动到一个相
邻的城市 在国王每次移动前,建筑师可以选择国家内任意不超过k个城市建造出凯旋门 如果在任意一个时刻,国王所在的城市没有凯旋门 那么国王会很生气,
扮演建筑师的玩家就输了 如果所有的城市都建立起了凯旋门而国王一直没有走到有凯旋门的城市,那么建筑师就胜利了 Foreseeable不会建筑,所以他扮演国王 而让·夏格伦则
“扮演”建筑师(他本来就是建筑师不需要扮演)  容易发现k的大小非常影响游戏有趣度…… 如果k太大,那么建筑师可以在国王行动前就在所有城市建出凯旋门,那么国王就没有胜利的希望了
,这样Foreseeable会掀桌不玩 如果k太小,那么Foreseeable很有可能会发挥自己所剩无几的智商走到一个没有凯旋门的地方  让·夏格伦想享受虐Foreseeable的快感 所以你要帮他确
定最小的k,使得在这个游戏中,如果建筑师足够聪明的话,建筑师必胜
Input 第一行一个整数n 接下来n-1行,每行两个整数u,v,表示u,v相邻 Output 一行一个整数表示最小的k
Sample Input
7 1 2 1 3 2 5 2 6 7 2 4 1Sample Output3
Hint 1<=n<=300000
样例解释:在foreseeable第一次行动前,让在2,3,4城市建好
凯旋门,然后接下来无论foreseeable走到哪个城市,
在5,6,7建好凯旋门就能保证让的胜利了


答案满足单调性显然可以二分答案,但是二分完之后该如何呢?直接模拟显然不行...然后就被卡住了。看了题解。要跑路的人一定是从根跑到叶子节点,不会回头,因为往回走不但不会逃离,反而会让另一个人染更多的格子,因为他从根节点到这的路径一定都被染过色了。这为树形DP提供了基础。我们设 $f[i]$ 为以i为根的子树,要让B不会走到不被染色的节点的子树的最小需要被覆盖数量。显然 $f[x]=min \left ( \sum_{y\subseteq son[x]} { } f[y] + deg[x] - mid, 0 \right )$ .$deg[x]$ 为x节点的度数-1(因为不包括他父亲)。然后最后判断$f[0]$是否等于0就行了。

 
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <map>
using namespace std;
#define reg register
inline char gc() {static const int BS = 1 << 22;static unsigned char Buf[BS], *st, *ed;if (st == ed) ed = Buf + fread(st = Buf, 1, BS, stdin);return st == ed ? EOF : *st++;
}
#define gc getchar
inline int read() {int res=0;char ch=getchar();bool fu=0;while(!isdigit(ch)) {if(ch=='-')fu=1;ch=getchar();}while(isdigit(ch))res=(res<<3)+(res<<1)+(ch^48), ch=getchar();return fu?-res:res;
}
#define N 300005
int n;
struct edge {int nxt, to;
}ed[N*2];
int head[N], cnt, deg[N];
inline void add(int x, int y) {ed[++cnt] = (edge){head[x], y};head[x] = cnt;deg[y]++;
}
int f[N];int mid;void dp(int x, int fa)
{int res = 0;for (reg int i = head[x] ; i ; i = ed[i].nxt){int to = ed[i].to;if (to == fa) continue;dp(to, x);res += f[to] + 1;}f[x] = max(res - mid, 0);
}inline bool check()
{memset(f, 0, sizeof f);dp(1, 0);return f[1] == 0;
}int main()
{n = read();for (reg int i = 1 ; i < n ; i ++){int x = read(), y = read();add(x, y), add(y, x);}if (n == 1) return puts("0"), 0;int l = 1, r = n, ans;while(l <= r){mid = l + r >> 1;if (check()) ans = mid, r = mid - 1;else l = mid + 1;}cout << ans << endl;return 0;
}

转载于:https://www.cnblogs.com/BriMon/p/9697790.html

[Luogu3554] Poi2013 Triumphal arch相关推荐

  1. BZOJ 3420: Poi2013 Triumphal arch

    二分答案 第二个人不会走回头路 那么F[i]表示在i的子树内(不包括i)所需要的额外步数 F[1]==0表示mid可行 k可能为0 #include<cstdio> #include< ...

  2. 解题:POI 2013 Triumphal arch

    题面 二分答案,问题就转化为了一个可行性问题,因为我们不知道国王会往哪里走,所以我们要在所有他可能走到的点建造,考虑用树形DP解决(这个DP还是比较好写的,你看我这个不会DP的人都能写出来=.=) 定 ...

  3. TensorFlow神经网络(九)VGG net论文阅读笔记

    [注]内容来自MOOC人工智能实践TensorFlow笔记课程第8讲 来源:2015 ICLR 用于图像分类的文章: Very Deep Convolutional Networks for Larg ...

  4. ValueError: You are trying to load a weight file containing 0 layers into a model with 16 layers.

    ValueError: You are trying to load a weight file containing 0 layers into a model with 16 layers. 在使 ...

  5. imagenet数据集类别标签和对应的英文中文对照表

    预测结果输出one-hot类型,最大概率的下标即为对于类别号   0: 'tench, Tinca tinca',                             丁鲷(鱼) 1: 'gold ...

  6. tensorflow 随笔-----------VGG网络的模型的复现

    推荐个课程北京大学的tensorflow 笔记 VGG网络是谷歌千分类用的,实现的是对图像的识别 由于模型过大,需要的可以私聊我(13072509383微信) vgg16.py 网络对参数的读取 im ...

  7. pytorch 移植到Android平台(一)

    前期准备 模型 model.pt 一张待识别的图片 标签 ImageNetClasses.java(具体代码放在了后面) 目录结构如下 代码 下面的代码,将一张图片喂给神经网络模型,得到输出结果后,将 ...

  8. 深度学习与TensorFlow实战(十)卷积神经网络—VGG(16)神经网络

    架构: 训练输入:固定尺寸224x224的RGB图像. 预处理:每个像素减去训练集上的RGB均值. 卷积核:一系列3X3卷积核堆叠,步长为1,采用padding保持卷积后图像空间分辨率不变. 空间池化 ...

  9. TensorFlow北大公开课学习笔记-8 复现vgg16并实现图片识别

    注:本系列文章主要是复现北京大学TensorFlow笔记中的代码,方便以后使用,并没有详细讲解流程,因为我并不是专门做教程的.何况北大的教程讲的已经很好了,有需要了解详细过程的可以去看北大的教程哈. ...

  10. 【PyTorch】如何取得预训练模型的标签label列表(以 Alexnet 在 ImageNet 上的预训练模型为例)

    PyTorch 预训练模型 PyTorch 提供过了大量的预训练模型可以直接拿来使用,或者进行增量训练和微调. 拿 Alexnet 的预训练模型为例 import torch import torch ...

最新文章

  1. 80年代高考数学卷,共10套,有您做过的高考卷吗?
  2. rap 接口管理 java_有没有类似阿里rap的api管理方案(rap太卡了)
  3. Spring Boot快速搭建Spring框架
  4. c语言编译时检查逻辑错误吗,C语言陷阱与技巧20节,自定义“编译时”assert方法,在代码编译阶段检查“逻辑”错误...
  5. Programming Computer Vision with Python【学习笔记】【第一章】
  6. 扎克伯格夏威夷州大肆买地引发当地不满 被批搞“新殖民主义”
  7. 第一次请领导喝酒,五百左右的白酒有哪些推荐?
  8. ELK 日志分析系统
  9. Unity3D 显示FPS
  10. macos安装盘第三方工具制作_简单制作macOSSierra正式版U盘USB启动安装盘方法教程(全新安装Mac系统)...
  11. iOS真机测试详细步骤及图解
  12. 【林轩田】机器学习基石(九)——线性回归
  13. Unity3D——第一人称FPS生存游戏(resident zombies)
  14. PHP使用swagger-php自动生成api文档(详细附上完整例子)
  15. 关于Oracle导出到csv文件的脚本-spool方法
  16. col-xs , col-sm , col-md , col-lg是什么意思?什么时候用?
  17. BootStrap框架模块:BootStrap4实战
  18. JMeter 系列 —— BeanShell 取样器
  19. 年会回顾|因智而生 聚领新进,深眸科技扬帆起航,凝心聚力谱新篇
  20. 【从零开始玩量化14】如何获取申万行业数据

热门文章

  1. 来自一个大牛对ACM的总结
  2. jq实现表格冻结窗格的样式
  3. 无线传感网络——串口通信
  4. JetsonNano跑YoloV3速度评测
  5. c语言的条件运算符,C语言条件运算符
  6. wifi握手包自动跑包
  7. 【Git】git init
  8. linux 路由器 限速,Linux服务器限速WonderShaper使用方法 | 陌小九
  9. Geronimo tomcat: 在 Apache Geronimo 插件体系中将 Apache Tomcat 这个优秀的 Web 容器整合至其中...
  10. Elasticsearch分布式引擎7.x,2021黑马详细课程笔记