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 ...
随机推荐
- .NET 摄像头采集
本文主要介绍摄像头(相机)如何采集数据,用于类似摄像头本地显示软件,以及流媒体数据传输场景如传屏.视讯会议等. 摄像头采集有多种方案,如AForge.NET.WPFMediaKit.OpenCvSha ...
- Mathematica的介绍及使用方法
Mathematica 是由 Wolfram Research 公司开发的数学软件,可用于数学.物理.工程.生物等领域的计算和建模.其官方网站为 www.wolfram.com/mathematica ...
- 喜报!Fluent Editor 开源富文本迎来了第一位贡献者!
你好,我是 Kagol,个人公众号:前端开源星球. 2024年8月20日,刚开源一周的富文本 Fluent Editor 迎来了第一位贡献者:zzxming 1 Bug 描述 zzxming 同学修复 ...
- ECharts实现雷达图详解
ECharts 是一款由百度开源的数据可视化工具,它提供了丰富的图表类型,如折线图.柱状图.饼图.散点图.雷达图.地图.K线图.热力图.仪表盘等,以及丰富的交互功能.ECharts 组件的核心功能实现 ...
- 【YashanDB知识库】如何远程连接、使用YashanDB?
问题现象 在各个项目实施中,我们经常遇到客户.开发人员需要连接和使用YashanDB但不知如何操作的问题,本文旨在介绍远程连接.使用YashanDB的几种方式. 问题的风险及影响 无风险 问题影响的版 ...
- Vue 3.3.11 迁移指南
https://v3-migration.vuejs.org/zh/ 用于迁移的构建版本 @vue/compat (即"迁移构建版本") 是一个 Vue 3 的构建版本,提供了可配 ...
- OxyPlot公共属性一览
一.PlotModel 1.构造函数中设置的属性 public PlotModel() { this.Axes = new ElementCollection(this); //坐标轴集合; this ...
- 2024 ByteCTF
ByteCTF 极限逃脱 题目描述:本题需要通过动态调试分析出要输入的内容,可能在某些地方会有提示出现. 这是一个IOS逆向,因为没有设备只能静态分析 流程和安卓逆向大概一致 解压拖进ida 提示输入 ...
- 对 LLM 工具使用进行统一
我们为 LLM 确立了一个跨模型的 统一工具调用 API.有了它,你就可以在不同的模型上使用相同的代码,在 Mistral.Cohere.NousResearch 或 Llama 等模型间自由切换,而 ...
- union联合体的缺陷
传统的 union 联合体在 C++ 中虽然提供了一种能够在相同的内存空间内存储多种不同类型的方式,但它也有一些显著的缺陷和限制.这些缺陷让 union 的使用不太安全,尤其是在复杂的程序中.以下是传 ...