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. Python 包安装和 postgresql 的一些问题

    今天安装 hgvs 这个 python 包的时候,遇到几个比较有代表性的问题,记录分享一下. hgvs is a Python package to parse, format, validate, ...

  2. 如何通过AWS的AmazonSageMaker进行机器学习

    目录 <如何通过 AWS 的 Amazon SageMaker 进行机器学习> 一.引言 随着人工智能和机器学习的发展,越来越多的企业和机构开始使用这些技术来进行各种应用场景的处理和分析. ...

  3. BLOB-CLOB 处理成String (*)

    实体类中的写法: --实体类对应的类型为byte[] (clob为char[]). /* byte[] blob = commonService.getPersonImage(bean.getIdCa ...

  4. 【Redis】基础命令

    声明:本篇文章参考于该作者的# Redis从入门到精通:中级篇,大家有兴趣,去关注一下. 1.字符串(String) String(字符串)是Redis中最简单的一种数据结构,和MemCache数据结 ...

  5. 【技术积累】Mysql中的SQL语言【技术篇】【四】

    数据的连接与关联查询 INNER JOIN INNER JOIN是MySQL中的一种表连接操作,用于将两个或多个表中的行基于一个共同的列进行匹配,并返回匹配的结果集. 下面是一个案例,假设有两个表:o ...

  6. [转]-- ISP(图像信号处理)算法概述、工作原理、架构、处理流程

    目录 ISP的主要内部构成: ISP内部包含 CPU.SUP IP(各种功能模块的通称).IF 等设备 ISP的控制结构:1.ISP逻辑 2.运行在其上的firmware ISP上的Firmware包 ...

  7. matlab的gui图像处理操作界面,实现重置和退出按钮功能

    axes控件实现了展示图片,动态txt控件实现了展示或者输入参数. 重置 在gui界面右键点击重置pushbotton回到代码块callback,编写代码 以下代码是实现图片和参数数字重置,是重置按钮 ...

  8. keycloak~AbstractJsonUserAttributeMapper的作用

    AbstractJsonUserAttributeMapper 它是一个抽象类,用来更新条件更新用户属性(user_attribute)的信息,我们在实现自己的mapper时,需要关注3个方法,下面分 ...

  9. 学习lspci:总线

    00:00.0 Host bridge 总线地址 00:00.0 是指PCI总线上的第一个设备,也称为根复杂性总线.在PCI架构中,每个设备都有唯一的总线地址,由域号.总线号.设备号和功能号组成.其中 ...

  10. Angular:error TS2717: Subsequent property declarations must have the same type. Property 'contentRect' mu st be of type 'DOMRectReadOnly', but here has type 'DOMRectReadOnly'.

    解决方案 在tsconfig.json的compilerOptions选项中添加如下内容"skipLibCheck": true. 如下图所示 之后重新启动项目. 如下图启动成功