Description

Link.

定义一条链的价值为链上点权乘积除以节链上点数,求一条价值最小的链。

Solution

结论:答案链上最多包含一个 \(2\)(其余全为 \(1\)),并且不在链的两端点。

证明:我们问题分成两个 \(\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\rightarrow1\rightarrow\cdots\rightarrow X\rightarrow1\rightarrow1\cdots
\]

即一堆 \(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\)。(反之可以证伪,懒得写了 QwQ)

所以有 \(X\le2\)。

又 \(X\neq1\),所以 \(X=2\)。

    • 我们设我们选出的链为大概这样的造型:
\[1\rightarrow1\rightarrow\cdots\rightarrow X\rightarrow1\rightarrow\cdots\rightarrow1\rightarrow Y\rightarrow1\cdots
\]

即一堆 \(1\) 中夹了一个 \(X\) 一个 \(Y\)。

这里我们可以把 \(Y\) 以前当成 \(\texttt{pass 2}\) 的第一个类型,设其共有 \(N\) 个数。

那么假设我们加入 \(Y\) 更优,即有 \(\frac{XY}{N+1}<\frac{X}{N}\),则有 \(NY<N+1\),由于 \(Y\neq1\),所以加入 \(Y\) 是更劣的。

后面的同理就可以推广了。

于是得证 QwQ。

然后我们就可以 DP 了。

设 \(f_{u,0/1}\) 表示节点 \(u\) 权值为的情况下最优答案。

转移就分类讨论一下:

  • \(x_{u}=1\)
\[\begin{cases}
f_{u,0}=\max\{f_{v,0}\}+1 \\
f_{u,1}=\max\{f_{v,1}\}+1
\end{cases}
\]
  • \(x_{u}=2\)
\[f_{u,1}=\max\{f_{v,0}\}+1
\]

答案也需要分类讨论(这里设 \(x,y\in\text{son}(u)\)):

  • \(x_{u}=1\)

答案为 \(\frac{1}{\max\{f_{x,0}+f_{y,0}+1\}}\),以及 \(\frac{2}{\max\{f_{x,0}+f_{y,1}\}+1}\)。

  • \(x_{u}=2\)

答案为 \(\frac{2}{\max\{f_{x,0}+f_{y,0}+1\}}\)。

用四个变量维护最大、次大的 \(f_{0},f_{1}\) 即可。

#include <cstdio>

const int MAXN = 1e6 + 5;

int rint () {
int x = 0, f = 1; char c = getchar ();
for ( ; c < '0' || c > '9'; c = getchar () ) f = c == '-' ? -f : f;
for ( ; c >= '0' && c <= '9'; c = getchar () ) x = ( x << 3 ) + ( x << 1 ) + ( c & 15 );
return x * f;
} template<typename _T>
void wint ( _T x ) {
if ( x < 0 ) putchar ( '-' ), x = ~ x + 1;
if ( x > 9 ) wint ( x / 10 );
putchar ( x % 10 ^ '0' );
} template<typename _T> _T MIN ( const _T x, const _T y ) { return x > y ? y : x; } struct starS {
int to, nx;
starS ( int T = 0, int N = 0 ) { to = T, nx = N; }
} as[MAXN * 2]; int n, cnt, Up = 1e9, Dn = 1, mnMg = 1e9, a[MAXN], f[MAXN][2], bgin[MAXN]; void pushEdge ( const int u, const int v ) { as[++ cnt] = starS ( v, bgin[u] ); bgin[u] = cnt; } void checkUpt ( const int x, const int y ) { if ( Up * y > Dn * x ) Up = x, Dn = y; } void dfs ( const int u, const int lst ) {
int mx0 = 0, se0 = 0, mx1 = 0, se1 = 0;
for ( int i = bgin[u]; i; i = as[i].nx ) {
int v = as[i].to;
if ( v == lst ) continue;
dfs ( v, u );
if ( f[v][0] > f[mx0][0] ) se0 = mx0, mx0 = v;
else if ( f[v][0] > f[se0][0] ) se0 = v;
if ( f[v][1] > f[mx1][1] ) se1 = mx1, mx1 = v;
else if ( f[v][1] > f[se1][1] ) se1 = v;
}
if ( a[u] == 1 ) {
f[u][0] = f[mx0][0] + 1;
checkUpt ( 1, f[mx0][0] + f[se0][0] + 1 );
if ( ! mx1 ) return;
f[u][1] = f[mx1][1] + 1;
if ( mx0 != mx1 ) checkUpt ( 2, f[mx0][0] + f[mx1][1] + 1 );
else {
checkUpt ( 2, f[se0][0] + f[mx1][1] + 1 );
if ( se1 ) checkUpt ( 2, f[mx0][0] + f[se1][1] + 1 );
}
}
else if ( a[u] == 2 ) f[u][1] = f[mx0][0] + 1, checkUpt ( 2, f[mx0][0] + f[se0][0] + 1 );
} int main () {
n = rint ();
for ( int i = 1, u, v; i < n; ++ i ) {
u = rint (), v = rint ();
pushEdge ( u, v ), pushEdge ( v, u );
}
for ( int i = 1; i <= n; ++ i ) a[i] = rint (), mnMg = MIN ( mnMg, a[i] );
if ( mnMg > 1 ) wint ( mnMg ), putchar ( '/' ), wint ( 1 ), putchar ( '\n' );
else dfs ( 1, 0 ), wint ( Up ), putchar ( '/' ), wint ( Dn ), putchar ( '\n' );
return 0;
}

Solution -「洛谷 P6287」「COCI 2016-2017」Mag的更多相关文章

  1. 「区间DP」「洛谷P1043」数字游戏

    「洛谷P1043」数字游戏 日后再写 代码 /*#!/bin/sh dir=$GEDIT_CURRENT_DOCUMENT_DIR name=$GEDIT_CURRENT_DOCUMENT_NAME ...

  2. 「 洛谷 」P2768 珍珠项链

    珍珠项链 题目限制 内存限制:125.00MB 时间限制:1.00s 标准输入输出 题目知识点 动态规划 \(dp\) 矩阵 矩阵乘法 矩阵加速 矩阵快速幂 题目来源 「 洛谷 」P2768 珍珠项链 ...

  3. 「 洛谷 」P4539 [SCOI2006]zh_tree

    小兔的话 推荐 小兔的CSDN [SCOI2006]zh_tree 题目限制 内存限制:250.00MB 时间限制:1.00s 标准输入输出 题目知识点 思维 动态规划 \(dp\) 区间\(dp\) ...

  4. 「 洛谷 」P2151 [SDOI2009]HH去散步

    小兔的话 欢迎大家在评论区留言哦~ HH去散步 题目限制 内存限制:125.00MB 时间限制:1.00s 标准输入 标准输出 题目知识点 动态规划 \(dp\) 矩阵 矩阵乘法 矩阵加速 矩阵快速幂 ...

  5. Solution -「JSOI 2019」「洛谷 P5334」节日庆典

    \(\mathscr{Description}\)   Link.   给定字符串 \(S\),求 \(S\) 的每个前缀的最小表示法起始下标(若有多个,取最小的).   \(|S|\le3\time ...

  6. Solution -「洛谷 P4372」Out of Sorts P

    \(\mathcal{Description}\)   OurOJ & 洛谷 P4372(几乎一致)   设计一个排序算法,设现在对 \(\{a_n\}\) 中 \([l,r]\) 内的元素排 ...

  7. Solution -「POI 2010」「洛谷 P3511」MOS-Bridges

    \(\mathcal{Description}\)   Link.(洛谷上这翻译真的一言难尽呐.   给定一个 \(n\) 个点 \(m\) 条边的无向图,一条边 \((u,v,a,b)\) 表示从 ...

  8. Solution -「APIO 2016」「洛谷 P3643」划艇

    \(\mathcal{Description}\)   Link & 双倍经验.   给定 \(n\) 个区间 \([a_i,b_i)\)(注意原题是闭区间,这里只为方便后文描述),求 \(\ ...

  9. 「P4994」「洛谷11月月赛」 终于结束的起点(枚举

    题目背景 终于结束的起点终于写下句点终于我们告别终于我们又回到原点…… 一个个 OIer 的竞赛生涯总是从一场 NOIp 开始,大多也在一场 NOIp 中结束,好似一次次轮回在不断上演.如果这次 NO ...

  10. 「洛谷4197」「BZOJ3545」peak【线段树合并】

    题目链接 [洛谷] [BZOJ]没有权限号嘤嘤嘤.题号:3545 题解 窝不会克鲁斯卡尔重构树怎么办??? 可以离线乱搞. 我们将所有的操作全都存下来. 为了解决小于等于\(x\)的操作,那么我们按照 ...

随机推荐

  1. 通过redis学网络(1)-用go基于epoll实现最简单网络通信框架

    本系列主要是为了对redis的网络模型进行学习,我会用golang实现一个reactor网络模型,并实现对redis协议的解析. 系列源码已经上传github https://github.com/H ...

  2. midjourney国内版上线! 快来体验一下midjourney的强大功能

    最近大火的midjourney国内版上线了!该网站对接了midjourneyAPI,以文生图.以图生图功能都支持,下面我们来体验一下它的功能. 网址:https://www.weijiwangluo. ...

  3. Python运维开发之路《函数进阶》

    面向对象类的进阶 抽象类 python 没有抽象类.接口的概念,所以要实现这种功能需要导入abc模块 py2:导入abc函数,_metaclass__ = abc.ABCMeta;在强制调用类下:@a ...

  4. Taurus .Net Core 微服务开源框架:Admin 插件【3】 - 指标统计管理

    前言: 继上篇:Taurus .Net Core 微服务开源框架:Admin 插件[2] - 系统环境信息管理 本篇继续介绍下一个内容: 1.系统指标节点:Metric - API 界面 界面图如下: ...

  5. Mysql基础篇(四)之事务

    一. 事务简介 事务是一组操作的集合,它是一个不可分隔的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败. 就比如:张三给李四转账1000块钱 ...

  6. 痞子衡嵌入式:从功耗测试角度了解i.MXRTxxx系列片内SRAM分区电源控制

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是从功耗测试角度了解i.MXRTxxx系列片内SRAM分区电源控制. 我们知道配合 MCU 一起工作的存储器包含 ROM(Flash) 和 ...

  7. 从Excel 电子表格中读取数据并插入到数据库的简单方式

    using (FileStream fileStreamRead = new FileStream("new.xls" , FileMode.Open )) { //创建工作簿 I ...

  8. 2023年最具威胁的25种安全漏洞(CWE TOP 25)

    摘要: CWE Top 25 是通过分析美国国家漏洞数据库(NVD)中的公共漏洞数据来计算的,以获取前两个日历年 CWE 弱点的根本原因映射. 本文分享自华为云社区<2023年最具威胁的25种安 ...

  9. RDB初步了解

    RDB概念 快照文件是.rdb结尾 redis6.2以前和之后(包括6.2)在什么条件下会保存rdb文件有所不同 以前 15min&&1个key(改变)调用保存 5min&&a ...

  10. 【持续更新】C/C++ 踩坑记录(一)

    未定义行为之 NULL dereference 下面这段代码中 is_valid() 解引用了空指针 str,我们的直觉是编译运行后将迎来 SIGSEGV,然而事情并非所期望的那样. /* * ub_ ...