Solution -「COCI 2016-2017」 Mag 结论证明
结论:最多包含一个 \(2\),并且不在链的两端点。
证明:我们问题分成两个 \(\texttt{pass}\)。
- \(\texttt{pass 1}\):\(\forall u,s.t.x_{u}\ge2\)。
答案显然为 \(\min\{x_{u}\},u\in V\)。
\(\texttt{pass 2}\):\(\exists E'\subset E,s.t.x_{u}=1,u\in E'\wedge x_{v}\ge2,v \in E \setminus E\)。
- 我们设我们选出的链为大概这样的造型:
\]
即一堆 \(1\) 中夹了一个 \(X\)。
我们设 \(X\) 左边有 \(l\) 个节点,右边有 \(r\) 个节点。
则价值为整条链 \(\frac{X}{l+r+1}\),左边 \(\frac{1}{l}\),右边 \(\frac{1}{r}\)。
为方便我们这里设 \(l<r\)。
那么左边的价值一定大于右边。
这里假设 \(\frac{1}{r}>\frac{X}{l+r+1}\),则有 \(X<\frac{l+1}{r}+1\),又 \(r\ge l+1\),所以 \(\frac{l+1}{r}\le1\)。(假设反过来可以证伪。
所以有 \(X\le2\)。
又 \(X\neq1\),所以 \(X=2\)。
- 我们设我们选出的链为大概这样的造型:
\]
即一堆 \(1\) 中夹了一个 \(X\) 一个 \(Y\)。
这里我们可以把 \(Y\) 以前当成 \(\texttt{pass 2}\) 的第一个类型,设其共有 \(N\) 个数。
那么假设我们加入 \(Y\) 更优,即有 \(\frac{XY}{N+1}<\frac{X}{N}\),则有 \(NY<N+1\),由于 \(Y\neq1\),所以加入 \(Y\) 是更劣的。
然后此题就很水了。放个代码以供参考。
规定 \(dp[i]\) 表示以 \(i\) 为端点的除 \(i\) 外全为 \(1\) 的串。
\(dp2[i]\) 表示带一个 \(2\) 的 \(dp[i]\)。
\(ans[i]\) 表示过 \(i\) 的最长全 \(1\) 串。
\(ans2[i]\) 表示过 \(i\) 的最长的有一个 \(2\) 且不在端点上,其余全为为 \(1\) 的串。
#include <cstdio>
#include <vector>
#include <cstring>
using namespace std;
typedef long long LL;
inline LL Max(LL x, LL y) {return x > y ? x : y;}
inline LL Min(LL x, LL y) {return x < y ? x : y;}
const int MAXN = 1e6 + 5;
const int INF = 0x3f3f3f3f;
const LL INf = 0x7f7f7f7f;
LL w[MAXN];
vector<int> mp[MAXN];
void Add_Edge(int u, int v) {
mp[u].push_back(v);
mp[v].push_back(u);
}
LL gcd(LL x, LL y) {
if(!y)
return x;
return gcd(y, x % y);
}
LL dp[MAXN], dp2[MAXN], ans2[MAXN], ans[MAXN];
void dfs(int u, int fa) {
if(w[u] == 1) {
dp[u] = 1;
ans2[u] = 1;
ans[u] = 1;
}
for(int i = 0; i < mp[u].size(); i++) {
int v = mp[u][i];
if(v == fa)
continue;
dfs(v, u);
if(w[u] == 1 || w[u] == 2) {
if(w[u] == 2)
ans2[u] = Max(ans2[u], dp[u] + dp[v]);
if(w[u] == 1) {
ans[u] = Max(ans[u], dp[u] + dp[v]);
ans2[u] = Max(ans2[u], dp[u] + dp2[v]);
ans2[u] = Max(ans2[u], dp2[u] + dp[v]);
}
dp[u] = Max(dp[u], dp[v] + 1);
if(dp2[v] != -1)
dp2[u] = Max(dp2[u], dp2[v] + 1);
}
}
if(w[u] == 2) {
dp2[u] = dp[u];
dp[u] = 0;
}
}
int main() {
// freopen("P6287_4.in", "r", stdin);
memset(dp2, -1, sizeof dp2);
int n;
scanf ("%d", &n);
for(int i = 1; i < n; i++) {
int u, v;
scanf ("%d %d", &u, &v);
Add_Edge(u, v);
}
LL mi = INF;
for(int i = 1; i <= n; i++) {
scanf ("%lld", &w[i]);
mi = Min(mi, w[i]);
}
if(mi != 1) {
printf("%d/1\n", mi);
return 0;
}
dfs(1, -1);
LL res = 0;
for(int i = 1; i <= n; i++)
res = Max(res, ans2[i]);
LL x_2 = 2, y_2 = res;
LL t = gcd(x_2, y_2);
// printf("%lld\n", res);
x_2 /= t;
y_2 /= t;
double com2 = x_2 * 1.0 / y_2;
if(!res)
com2 = INf;
res = 0;
for(int i = 1; i <= n; i++)
res = Max(res, ans[i]);
// printf("%lld\n", res);
LL x_1 = 1, y_1 = res;
double com1 = x_1 * 1.0 / y_1;
if(!res)
com1 = INf;
if(com2 > com1)
printf("%lld/%lld", x_1, y_1);
else
printf("%lld/%lld", x_2, y_2);
return 0;
}
Solution -「COCI 2016-2017」 Mag 结论证明的更多相关文章
- Solution -「COCI 2014-2015 #2」「洛谷 P6406」Norma
\(\mathcal{Description}\) Link. 给定 \(\{a_n\}\),求: \[\sum_{i=1}^n\sum_{j=i}^n(j-i+1)\min_{k=i}^j\ ...
- [LOJ#2327]「清华集训 2017」福若格斯
[LOJ#2327]「清华集训 2017」福若格斯 试题描述 小d是4xx9小游戏高手. 有一天,小d发现了一个很经典的小游戏:跳青蛙. 游戏在一个 \(5\) 个格子的棋盘上进行.在游戏的一开始,最 ...
- Loj #2331. 「清华集训 2017」某位歌姬的故事
Loj #2331. 「清华集训 2017」某位歌姬的故事 IA 是一名会唱歌的女孩子. IOI2018 就要来了,IA 决定给参赛选手们写一首歌,以表达美好的祝愿.这首歌一共有 \(n\) 个音符, ...
- Loj #2324. 「清华集训 2017」小 Y 和二叉树
Loj #2324. 「清华集训 2017」小 Y 和二叉树 小Y是一个心灵手巧的OIer,她有许多二叉树模型. 小Y的二叉树模型中,每个结点都具有一个编号,小Y把她最喜欢的一个二叉树模型挂在了墙上, ...
- Loj #2321. 「清华集训 2017」无限之环
Loj #2321. 「清华集训 2017」无限之环 曾经有一款流行的游戏,叫做 *Infinity Loop***,先来简单的介绍一下这个游戏: 游戏在一个 \(n \times m\) 的网格状棋 ...
- Loj 2320.「清华集训 2017」生成树计数
Loj 2320.「清华集训 2017」生成树计数 题目描述 在一个 \(s\) 个点的图中,存在 \(s-n\) 条边,使图中形成了 \(n\) 个连通块,第 \(i\) 个连通块中有 \(a_i\ ...
- loj #2325. 「清华集训 2017」小Y和恐怖的奴隶主
#2325. 「清华集训 2017」小Y和恐怖的奴隶主 内存限制:256 MiB时间限制:2000 ms标准输入输出 题目类型:传统评测方式:文本比较 题目描述 "A fight? Co ...
- [LOJ#2330]「清华集训 2017」榕树之心
[LOJ#2330]「清华集训 2017」榕树之心 试题描述 深秋.冷风吹散了最后一丝夏日的暑气,也吹落了榕树脚下灌木丛的叶子.相识数年的Evan和Lyra再次回到了小时候见面的茂盛榕树之下.小溪依旧 ...
- [LOJ#2329]「清华集训 2017」我的生命已如风中残烛
[LOJ#2329]「清华集训 2017」我的生命已如风中残烛 试题描述 九条可怜是一个贪玩的女孩子. 这天她在一堵墙钉了 \(n\) 个钉子,第 \(i\) 个钉子的坐标是 \((x_i,y_i)\ ...
随机推荐
- 1.8 常见Linux发行版本有哪些?
新手往往会被 Linux 众多的发行版本搞得一头雾水,我们首先来解释一下这个问题. 从技术上来说,李纳斯•托瓦兹开发的 Linux 只是一个内核.内核指的是一个提供设备驱动.文件系统.进程管理.网络通 ...
- Intel CPU平台和架构介绍
点击上方"开源Linux",选择"设为星标" 回复"学习"获取独家整理的学习资料! 服务器主板上数据传输流依次为CPU .内存.硬盘和网卡, ...
- 面试官:我把数据库部署在Docker容器内,你觉得如何?
开源Linux 一个执着于技术的公众号 上一篇:CentOS 7上搭建Zabbix4.0 近2年Docker非常的火热,各位开发者恨不得把所有的应用.软件都部署在Docker容器中,但是您确定也要把数 ...
- JZ009乘积小于k的子数组
title: 乘积小于k的子数组 题目描述 题目链接:乘积小于k的子数组.剑指offer009 解题思路 注意: 一开始的乘积k值就是小的,随着右边窗口移动才会不断增大 怎么样的条件才能更新左窗口:当 ...
- 攻防世界web进阶题—unfinish
攻防世界web进阶题-unfinish 1.看一下题目提示SQL 2.打开题目看一下源码,没有问题 3.查一下网站的组成:php+Apache/2.4.7+Ubuntu 4.扫一下目录,扫到一个注册页 ...
- Spring 源码(10)Spring Bean 的创建过程(1)
Spring Bean的创建刚开始进行了一些准备工作,比如转换服务的初始化,占位符解析器的初始化,BeanDefinition元数据的冻结等操作,都是为了在创建Bean的过程中保证Bean的正确的创建 ...
- MVC 与 Vue
MVC 与 Vue 本文写于 2020 年 7 月 27 日 首先有个问题:Vue 是 MVC 还是 MVVM 框架? 维基百科告诉我们:MVVM 是 PM 的变种,而 PM 又是 MVC 的变种. ...
- 镜头随人物而动,视频编辑服务让用户稳站C位
现如今,视频是用户记录生活最热门的方式,各种App在发布视频界面都提供了视频简单剪辑的功能.除了增加音乐.滤镜.贴纸这些基础功能以外,用户越来越追求镜头感,这往往需要通过专业的视频剪辑软件手动打上关键 ...
- 亿信BI——维度转换组件使用
功能模块: 用户点击"维度转换"模块进行维度转换操作,维度转换页面的顶部导航栏包括基本属性和转换设置两部分. 基础属性: 在基本属性模块部分,编号.标题和类型是必填项且系统已经默认 ...
- git bisect:让你闭眼都能定位疑难 bug的利器
摘要:git bisect命令使用二分搜索算法来查找提交历史中的哪一次提交引入了错误.它几乎能让你闭着眼睛快速定位任何源码导致的问题,非常实用. 本文分享自华为云社区<利用好 git bisec ...