CF1515F Phoenix and Earthquake
CF1515F Phoenix and Earthquake
证明题。
思路
考虑不合法的情况,如果 \(\sum a_i < (n-1)\times x\),肯定是不合法的。
再考虑对于一个可行的情况,最后缩的边肯定形成一棵树,所以我们大胆假设:任意一棵生成树只要满足 \(\sum a_i \geq (n-1)\times x\) 有合法的缩边方案。
考虑归纳证明:
在 \(n\) 个点的树中考虑叶子节点 \(u\),其父亲为 \(v\)。
若 \(a_u < x\),那么我们删除 \((u,v)\) 这条边,由于所需总和 \((n-1)\times x\) 减少了 \(x\),而 \(\sum a_i\) 减少了 \(a_u\),所以归纳假设任然成立。将边 \((u,v)\) 加入栈。
若 \(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的更多相关文章
- [CF1515F] Phoenix and Earthquake(图论推导,构造)
题面 在紧张又忙碌地准备联合省选时,发生了大地震,把原本要参赛的 n n n 个城市之间的全部 m m m 条道路震垮了,使得原本互相都能到达的这 n n n 个城市无法交通了.现在,需要紧急恢复 n ...
- Phoenix综述(史上最全Phoenix中文文档)
个人主页:http://www.linbingdong.com 简书地址:http://www.jianshu.com/users/6cb45a00b49c/latest_articles 网上关于P ...
- 在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 ...
- HBase+Phoenix整合入门--集群搭建
环境:CentOS 6.6 64位 hbase 1.1.15 phoenix-4.7.0-HBase-1.1 一.前置环境: 已经安装配置好Hadoop 2.6和jdk 1.7 二.安装hba ...
- SQL Server恢复软件 Stellar Phoenix sql recovery
SQL Server恢复软件 Stellar Phoenix sql recovery http://www.stellarinfo.com/ http://www.stellarinfo.com/ ...
- Hbase+ Phoenix搭建教程
Hbase+ Phoenix搭建教程 一.Hbase简介 HBase是基于列存储.构建在HDFS上的分布式存储系统,其主要功能是存储海量结构化数据. HBase构建在HDFS之上,因此HBase也是通 ...
- CDH5.4.5运行Phoenix导入CSV文件
1.安装phoenix 在界面上设置Phoenix的parcel包: http://52.11.56.155:7180/cmf/settings?groupKey=config.scm.parcel. ...
- Phoenix -修复表索引
索引的修复可以通过2种方式,(关于pehoenix的索引的生命周期可以参考 https://community.hortonworks.com/articles/58818/phoenix-inde ...
- phoenix将hdfs数据导入hbase
http://phoenix.apache.org/bulk_dataload.html
- phoenix 开发API系列 目录
phoenix 开发API系列(一)创建简单的http api phoenix 开发API系列(二)phoenix 各类 api 实现方式 phoenix 开发API系列(三)phoenix api ...
随机推荐
- 讲讲Java的序列化反序列化?
序列化:把对象转换为字节序列的过程称为对象的序列化. 反序列化:把字节序列恢复为对象的过程称为对象的反序列化. 什么时候会用到 当只在本地 JVM 里运行下 Java 实例,这个时候是不需要什么序列化 ...
- Manual 命令手册导出
man 命令的输出中含有大量的格式化字符和终端控制序列,这些是用来在终端中正确显示格式化文本(如加粗,下划线,分页等)所用的.如 BS(Backspace,退格). 如果我们直接用 man comma ...
- Windows 查看当前登录用户名
使用 PowerShell 输入 whoami,PowerShell 将以 hostname\username 的方式输出主机名和用户名: $ whoami hostname\username 使用 ...
- TreeMap源码详解—彻底搞懂红黑树的平衡操作
介绍 TreeSet和TreeMap在Java里有着相同的实现,前者仅仅是对后者做了一层包装,也就是说TreeSet里面有一个TreeMap(适配器模式). Java TreeMap实现了Sorted ...
- 深度学习批次(batch)、迭代(iteration)、周期(epoch)、前向传播(forward propagation)、反向传播(backward propagation)、学习率(learning rate)概念解释
虽然现在应该是已经熟练掌握这些基础概念的时候,但是我是鱼的记忆,上一秒的事情,下一秒就忘了,除非是重要的人的重要的事情,呜呜呜呜,我这个破脑子. 还是写一下吧,直接GPT出来的(人类之光,欢呼~). ...
- EF Core – 8.0 new features
参考 Docs – What's New in EF Core 8 Support DateOnly and TimeOnly SQL Server 早在 2008 年就已经支持 date 和 tim ...
- el-table
el-table-column 渲染的顺序不对,第一列被渲染到最后 el-table-column 必须作为 el-table 或 el-table-column 的直接子元素使用,如果不是将会导致标 ...
- uni-app v3.0.0-alpha-3090220231010001
https://uniapp.dcloud.net.cn/tutorial/ #-------------------------------------------------------- 未分类 ...
- 通过MobaXterm操作远程服务器电脑的方法
本文介绍在Windows电脑中,下载.配置MobaXterm软件,从而连接.操作远程服务器的方法. 因为是在Windows操作系统的电脑中连接服务器,所以建议使用MobaXterm.PuTTY ...
- 强化学习笔记之【SAC算法】
强化学习笔记之[SAC算法] 前言: 本文为强化学习笔记第四篇,第一篇讲的是Q-learning和DQN,第二篇DDPG,第三篇TD3 TD3比DDPG少了一个target_actor网络,其它地方有 ...