CF1041E Tree Reconstruction_构造_思维题
不难发现,每次询问结果一定是 (i,n)(i,n)(i,n), 而 iii 出现的次数恰好是 iii 到 i′i'i′ 的距离(i′i'i′ 是第一个不与 iii 相等的数)。我们可以将这颗树构造成一条链,然后就 AC 了。
Code:
#include<cstdio>
#include<cstdlib>
#include<algorithm>
using namespace std;
const int maxn = 1000 + 5;
int idx1[maxn], idx2[maxn], arr[maxn],A[maxn], n, pos;
bool cmp(int i,int j){ return idx1[i] < idx1[j]; }
inline bool insert(int x, int h){
for(int i = h;i <= n; ++i) if(!arr[i]) { arr[i] = x; return true; }
return false;
}
inline void fail(){ printf("NO"); exit(0); }
int main()
{
scanf("%d",&n);
for(int i = 1;i < n; ++i) { scanf("%d%d",&idx1[i],&idx2[i]); A[i] = i; if(idx1[i] > idx2[i]) swap(idx1[i], idx2[i]); }
sort(A + 1, A + n , cmp);
arr[n] = n;
for(int i = n - 1;i >= 1; --i){
int cur = A[i], pre = A[i - 1];
if(idx1[cur] == n || idx2[cur] != n) fail();
if(idx1[cur] != idx1[pre])
{
arr[i] = idx1[cur];
int a = idx1[pre] + 1, pos = i + 1;
while(a < idx1[cur]) { if(!insert(a, pos)) fail(); ++a; }
}
}
for(int i = 1;i <= n; ++i) if(!arr[i]) fail();
printf("YES\n");
for(int i = 1;i < n; ++i) printf("%d %d\n",arr[i], arr[i + 1]);
return 0;
}
CF1041E Tree Reconstruction_构造_思维题的更多相关文章
- CF1012B Chemical table 构造_思维_并查集
我们可以将横坐标和纵坐标看成是点.发现这些点之间是有传递性的. 题中说明,如果有矩阵中三个顶点被选,则底角的点也会被覆盖,发现这些点之间是有传递性的.那么我们最终达到的目的就是使整个图中只有 111 ...
- NOIP2016 天天爱跑步 线段树合并_桶_思维题
竟然独自想出来了,好开心 Code: #include<bits/stdc++.h> #define setIO(s) freopen(s".in","r&q ...
- CF1041F Ray in the tube构造_思维
不难发现起点必定是一个点. 每次间隔的距离一定是 2k2^k2k,关键就是要判断两点是否在同一跳跃距离上可被同时覆盖. 我们可以对上边进行 x1≡x_{1}\equivx1≡ x2mod(2∗dx) ...
- CF 949C Data Center Maintenance_强联通分量_思维题
题意: 某土豪公司建立了n个数据中心,把m份资料每份在其中的两个数据中心备份. 每个数据中心在一天h个小时当中有一个小时需要维护,此时不提供资料下载服务. 现在土豪公司想要将其中若干个数据中心的维护时 ...
- CF859C Pie Rules 动态规划 逆推_思维题
题意:有 nnn 个物品,每个物品有不同的价值,物品按顺序分给两个人,有一块令牌,每回合拥有令牌的人拥有物品的分配权,但是该回合未获得物品的那个人会在下回合获得令牌,开始令牌在Bob手里,两个人都采取 ...
- D. Destruction of a Tree_dfs序_性质分析_思维题
题意: 给定一棵树,每次可以拆掉一个树上度数为偶数的点,拆掉该点后,与该点所连的所有边都会被删掉.问,是否有一种删点顺序可以删掉所有的点.如果有,则输出任意一组解. 数据范围:线性做法 O(n)O(n ...
- 洛谷T44252 线索_分治线段树_思维题
分治线段树,其实就是将标记永久化,到最后再统一下传所有标记. 至于先后顺序,可以给每个节点开一个时间戳. 一般地,分治线段树用于离线,只查询一次答案的题目. 本题中,标记要被下传 222 次. Cod ...
- Codeforces Round #493 (Div. 2) C. Convert to Ones 乱搞_构造_好题
题意: 给你一个长度为 nnn 的 010101串 ,你有两种操作: 1.将一个子串翻转,花费 XXX 2.将一个子串中的0变成1,1变成0,花费 YYY 求你将这个01串变成全是1的串的最少花费. ...
- 贪心/构造/DP 杂题选做Ⅱ
由于换了台电脑,而我的贪心 & 构造能力依然很拉跨,所以决定再开一个坑( 前传: 贪心/构造/DP 杂题选做 u1s1 我预感还有Ⅲ(欸,这不是我在多项式Ⅱ中说过的原话吗) 24. P5912 ...
随机推荐
- CentOS7安装GitLab、汉化、邮箱配置及使用(转载)
同步首发: https://www.cnblogs.com/heyonggang/p/7778203.html http://www.yuanrengu.com/index.php/20171112. ...
- String、Stringbuffer、StringBuffer回顾
前言: 久了没用到,一下子就忘了..,参考文章:https://www.cnblogs.com/su-feng/p/6659064.html.https://baijiahao.baidu.com/s ...
- ToDoList(原生JS)了解一下
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- nlogn求逆序对&&陌上花开
前置: nlogn逆序对: 前一个小时我还真的不会这个Orz 这里运用归并排序的思想. 对于一个序列,我们把它先分开,再合并成一个有序序列. 引自https://blog.csdn.net/qq_30 ...
- vim+astyle安装使用
astyle下载安装 wget https://sourceforge.net/projects/astyle/files/astyle/astyle%203.1/astyle_3.1_linux.t ...
- struct 模块解决 TCP黏包问题
首先来看一下产生黏包现象的一段代码: # server.py 服务端 import socket sk = socket.socket() sk.bind(('127.0.0.1',9000)) ...
- C/C++ 获取文件夹下的所有文件列表
本系列文章由 @yhl_leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/51009608 提供一段C/C++代码示 ...
- volatile可见性和指令重排
volatile关键字的2个作用 1.线程的可见性 2.防止指令重排 什么是线程的可见性? 线程的可见性 就是一个线程对一个变量进行更改操作 其他线程获取会获得最新的值. 线程在执行的行 操作主线程的 ...
- java的数据的类型
1分类: 基本数据类型长度: Java中简单类型,占用字节数, 以及包装类 浮点数的默认类型是Double(8个字节) 如果想直接想一个变量赋值一个float(4个字节)要在数值后面添加f/F 如同向 ...
- A server is already running. Check tmp/pids/server.pid.
A server is already running. Check tmp/pids/server.pid. 把server.pid删除: 学习了: http://stackoverflow.co ...