CF1515F Phoenix and Earthquake

证明题。

思路

考虑不合法的情况,如果 \(\sum a_i < (n-1)\times x\),肯定是不合法的。

再考虑对于一个可行的情况,最后缩的边肯定形成一棵树,所以我们大胆假设:任意一棵生成树只要满足 \(\sum a_i \geq (n-1)\times x\) 有合法的缩边方案。

考虑归纳证明:

在 \(n\) 个点的树中考虑叶子节点 \(u\),其父亲为 \(v\)。

  1. 若 \(a_u < x\),那么我们删除 \((u,v)\) 这条边,由于所需总和 \((n-1)\times x\) 减少了 \(x\),而 \(\sum a_i\) 减少了 \(a_u\),所以归纳假设任然成立。将边 \((u,v)\) 加入栈。

  2. 若 \(a_u \geq x\),那么我们把 \(a_u\) 和 \(a_v\) 进行缩点,原树转化为 \(n-1\) 个节点新树。将边 \((u,v)\) 加入队列。

先使用队列输出边,再输出栈中的边

再给出这样的输出边的方案的正确性证明:

首先使用条件 \(2\) 中的边进行缩点,假设缩剩下了 \(t\) 个点,第 \(i\) 个点的点权为 \(a_i\)。

此时有 \(\sum a_i \geq (t-1)\times x\)。

其中仅可能包括根节点的 \(a_i\) 大于 \(x\);否则,可以进一步进行 \(2\) 操作的缩点,将满足 \(a_i\geq x\)​ 的点缩到根节点处。

当 \(i>1\) 时 \(a_i < x\),即 \(i>1\) 时 \(x-a_i \geq 1\)。

不妨设根节点的缩点点权为 \(a_1\),有 \(a_1 \geq \sum_{i=2}^t (x-a_i)\)。

此时根节点可以与任意一个相连的缩点合并,不妨设该点为 \(t\)(\(a_1\) 肯定大于等于 \(x-a_t\)),相当于不等式两边同时加了 \(a_t-x\),不等式仍然成立。

每次缩根节点和其相连的点就可以喽。

而我们根据栈输出的边正满足这样的条件,证明留给读者自行思考(doge)。

CODE

#include<bits/stdc++.h>
using namespace std; #define ll long long
#define pii pair<int,int>
#define F first
#define S second const int maxn=3e5+5; int n,m,x;
ll a[maxn]; vector<pii>E[maxn]; bool vis[maxn]; queue<int>que;
stack<int>stk; inline void dfs(int u)
{
vis[u]=true;
for(auto v:E[u])
{
if(vis[v.F]) continue;
dfs(v.F);
if(a[v.F]>=x) que.push(v.S),a[u]+=a[v.F]-x;
else stk.push(v.S);
}
} int main()
{
ll sum=0;
scanf("%d%d%d",&n,&m,&x);
for(int i=1;i<=n;i++) scanf("%lld",&a[i]),sum+=a[i];
if(sum<1ll*(n-1)*x){printf("NO");return 0;}
for(int i=1;i<=m;i++)
{
int u,v;
scanf("%d%d",&u,&v);
E[u].push_back({v,i}),E[v].push_back({u,i});
}
dfs(1);
puts("YES");
while(!que.empty()) printf("%d\n",que.front()),que.pop();
while(!stk.empty()) printf("%d\n",stk.top()),stk.pop();
}

CF1515F Phoenix and Earthquake的更多相关文章

  1. [CF1515F] Phoenix and Earthquake(图论推导,构造)

    题面 在紧张又忙碌地准备联合省选时,发生了大地震,把原本要参赛的 n n n 个城市之间的全部 m m m 条道路震垮了,使得原本互相都能到达的这 n n n 个城市无法交通了.现在,需要紧急恢复 n ...

  2. Phoenix综述(史上最全Phoenix中文文档)

    个人主页:http://www.linbingdong.com 简书地址:http://www.jianshu.com/users/6cb45a00b49c/latest_articles 网上关于P ...

  3. 在DBeaver中phoenix查询报错:org.apache.phoenix.exception.PhoenixIOException: The system cannot find the path specified

    环境:Phoenix:4.4,win7系统 问题:Phoenix在查询hbase时,报"系统找不到指定路径". 解决: 请参见 https://distcp.quora.com/C ...

  4. HBase+Phoenix整合入门--集群搭建

    环境:CentOS 6.6 64位    hbase 1.1.15  phoenix-4.7.0-HBase-1.1 一.前置环境: 已经安装配置好Hadoop 2.6和jdk 1.7 二.安装hba ...

  5. SQL Server恢复软件 Stellar Phoenix sql recovery

    SQL Server恢复软件 Stellar Phoenix sql recovery http://www.stellarinfo.com/ http://www.stellarinfo.com/ ...

  6. Hbase+ Phoenix搭建教程

    Hbase+ Phoenix搭建教程 一.Hbase简介 HBase是基于列存储.构建在HDFS上的分布式存储系统,其主要功能是存储海量结构化数据. HBase构建在HDFS之上,因此HBase也是通 ...

  7. CDH5.4.5运行Phoenix导入CSV文件

    1.安装phoenix 在界面上设置Phoenix的parcel包: http://52.11.56.155:7180/cmf/settings?groupKey=config.scm.parcel. ...

  8. Phoenix -修复表索引

    索引的修复可以通过2种方式,(关于pehoenix的索引的生命周期可以参考  https://community.hortonworks.com/articles/58818/phoenix-inde ...

  9. phoenix将hdfs数据导入hbase

    http://phoenix.apache.org/bulk_dataload.html

  10. phoenix 开发API系列 目录

    phoenix 开发API系列(一)创建简单的http api phoenix 开发API系列(二)phoenix 各类 api 实现方式 phoenix 开发API系列(三)phoenix api ...

随机推荐

  1. Python开发中,日期时间的相关处理

    在Python开发中,日期和时间处理是一个常见的需求.Python提供了多种模块和方法来处理日期和时间,以下是一些常用的模块和操作.通过介绍一些系统的Python类库以及第三方的类库,我们可以快速的实 ...

  2. 以Top-Down思维去解决问题——递归

    目录 递归的基础 递归的底层实现(不是重点) 递归的应用场景 编程中 两种解决问题的思维 自下而上(Bottom-Up) 自上而下(Top-Down) 自上而下的思考过程--求和案例 台阶问题 案例 ...

  3. 关于arcmap使用json文件转要素类

    手工编辑了一个json文件,或者在arcgis server下拉取到的json格式文件,通过arcmap进行转换时,出现异常,错误代码001558,此时就是json文件格式不是ansi导致的,用文本编 ...

  4. elementUI 时间线居左显示

    elementUI 时间线居左显示 一.vue + elementUI 实现时间线 Timellne 中时间戳居左显示 二.效果图 三.实现方法 关键代码: <el-timeline> & ...

  5. .NET 多版本 WinForm 开源控件库 SunnyUI

    前言 给大家推荐一款开源的 Winform 控件库,可以帮助我们开发更加美观.漂亮的 WinForm 界面. 项目介绍 SunnyUI.NET 是一个基于 .NET Framework 4.0+..N ...

  6. 【QT性能优化】QT性能优化之QT性能优化实战 QML优化 QT高性能 QT6系列视频课程 QT6 性能优化实战 QT高性能 QT原理源码 QML优化 GUI绘图原理源码

    QT性能优化实战视频课程 QT6 Widgets高性能应用编程 1.课前考试 2.字符串优化(上) 3.字符串优化(下) 4.绘图优化(上) 5.绘图优化(下)  6.QT界面优化(上) 7.QT界面 ...

  7. Python 项目配置管理框架技术选型

    一.背景介绍 在实际生产项目中,不同环境(如开发.测试.生产环境)常有不同配置需求,如数据库链接等.我们期望一份代码无需改动,仅通过单一配置变量调整就能适配和使用多个环境,实现 "一份代码, ...

  8. async/await和Grand Central Dispatch代码切换

    很多iOS开发开始学习结构化并发时已经用过了很多年Grand Central Dispatch,虽然从思想上二者区别很大,但是利用熟悉的东西去理解新的事物有助于提升学习理解的效率,接下来是这Grand ...

  9. 七,MyBatis-Plus 扩展功能:乐观锁,代码生成器,执行SQL分析打印(实操详细使用)

    七,MyBatis-Plus 扩展功能:乐观锁,代码生成器,执行SQL分析打印(实操详细使用) @ 目录 七,MyBatis-Plus 扩展功能:乐观锁,代码生成器,执行SQL分析打印(实操详细使用) ...

  10. android IO Prefetch源码分析

    I/O Prefetcher是高通本身提供的一套优化方案,可以用在Android手机App冷启动的时候.本文基于android Q 主要分libqti-iopd.vendor.qti.hardware ...