题意:

一共 2∗n2*n2∗n 个点,nnn 条关系,每条关系指定 2∗i2*i2∗i 与 2∗i−12*i-12∗i−1 两个点之间的树上距离,这个距离不会超过 nnn,保证有解。(1≤n≤105)(1\leq n\leq 10^5)(1≤n≤105)


思路:

构造题,主要就是如何限制条件,将问题简化再简化。

比赛时,主要是发现了两个性质。第一个性质是每个数只和一个数有关,和其它数字无关,因此只要把相邻数字填到正确区域就行,不用考虑数字之间的关系。

第二个性质是我们可以尝试构造一条链,然后将数字都摆在链上。

根据这两个性质 yyyyyy 了一个构造方法,然后成功 wa8wa\ 8wa 8…

回顾完比赛时的心酸,现在讲一个成功构造的方法。

仍然是构造链,但是我们考虑来构造一个长链,由于不同组合数字无关,因此我们可以构造一根长度为 nnn 的长链,比如 1、3、5、7...1、3、5、7...1、3、5、7... 然后问题就变成了如何把每个数对应的数安排一个位置。

我们将所有组合之间距离从大到小排序,由于距离一定不会超过 nnn,因此我们只需要判断第 iii 个组合间的距离是否等于 nnn,如果等于 nnn,就直接添到链尾,否则一定可以在链上找一个点构成一个分叉。由此,构造结束。


总结:

构造题的关键在于简化问题,而简化问题的方法在于限制条件。

而树上构造最常见的限制条件就是先构造一条长链,然后在构造链上的分叉,这种思考方式需要留意。


代码:

#include <bits/stdc++.h>
#define mem(a,b) memset(a,b,sizeof a);
#define rep(i,a,b) for(int i = a; i <= b; i++)
#define per(i,a,b) for(int i = a; i >= b; i--)
#define __ ios::sync_with_stdio(0);cin.tie(0);cout.tie(0)
typedef long long ll;
typedef double db;
const int N = 2*1e5+100;
const db EPS = 1e-9;
using namespace std;void dbg() {cout << "\n";}
template<typename T, typename... A> void dbg(T a, A... x) {cout << a << ' '; dbg(x...);}
#define logs(x...) {cout << #x << " -> "; dbg(x);}int n,pos[N],maxn;
vector<pair<int,int> > ans;
struct Node{int a,b,v;bool operator < (Node xx) const {return v > xx.v;}
}t[N];int main()
{scanf("%d",&n);rep(i,1,n){int a = 2*i, b = 2*i-1, v; scanf("%d",&v);t[i] = {a,b,v};}sort(t+1,t+1+n);int maxn = n, hp = 1;rep(i,1,n){while(pos[hp]) hp++;pos[hp] = t[i].a;if(hp+t[i].v == maxn+1){pos[hp+t[i].v] = t[i].b;maxn++;}else ans.push_back(make_pair(hp+t[i].v-1,t[i].b));}rep(i,1,maxn-1)ans.push_back(make_pair(i,pos[i+1]));for(auto &v:ans)printf("%d %d\n",pos[v.first],v.second);return 0;
}

【Codeforces contest-1214 E】Petya and Construction Set【树上构造】相关推荐

  1. Codeforces Round #583 E Petya and Construction (构造)

    It's Petya's birthday party and his friends have presented him a brand new "Electrician-n" ...

  2. codeforces contest 1166 E. The LCMs Must be Large---思维

    题目链接:https://codeforces.com/contest/1166/problem/E 题解: 代码: #include<bits/stdc++.h> using names ...

  3. 51nod 1536不一样的猜数游戏 思路:O(n)素数筛选法。同Codeforces 576A Vasya and Petya‘s Game。

    废话不多说,先上题目. 51nod Codeforces 两个其实是一个意思,看51nod题目就讲的很清楚了,题意不再赘述. 直接讲我的分析过程:刚开始拿到手有点蒙蔽,看起来很难,然后......然后 ...

  4. codeforces contest 1142

    前言 这个contest是div1的,div2的题其实也做了一下,但这里就不贴出了 CF 1142 A 题目大意:有nnn个城市排成一圈,相邻两个城市距离为kkk,一个人从起点SSS(SSS未给出)开 ...

  5. codeforces contest 1140(D~G)

    前言 A~C不想写博客了,就不写了,后面的题还是要推一推的,所以写一下 CF 1140 D 题目大意: 给出一个正多边形,顶点按顺序标号为111~nnn,一个三角划分的权值是每个三角形三个顶点的编号乘 ...

  6. codeforces contest 1119

    CF 1119 A 题目大意:给一个数组aia_iai​,求最大的i−ji-ji−j使得ai≠aja_i\neq a_jai​̸​=aj​,输出这个i−ji-ji−j的值 题解: 这题可以做到O(n) ...

  7. CodeForces Contest #1114: Round #538 (Div. 2)

    比赛传送门:CF #1114. 比赛记录:点我. 又 FST 了. [A]Got Any Grapes? 题意简述: 有三个人,第一个人需要吃绿色葡萄至少 \(a\) 个,第二个人需要吃绿色和紫色葡萄 ...

  8. Codeforces Contest 1138 problem B Circus —— 死亡1700,暴力

    Polycarp is a head of a circus troupe. There are n - an even number - artists in the troupe. It is k ...

  9. codeforces contest 869 problem C(组合数)

    The Intriguing Obsession time limit per test 1 second memory limit per test 256 megabytes input stan ...

  10. Codeforces Contest 1144 E Median String —— 水题

    This way 题意: 给你两个字符串,问你字典序在这两个字符串正中间的字符串是什么 题解: 好几个星期没做题目了,连1900都想了一段时间,一开始想着用2进制来做,但是想着想着发现直接用2进制做不 ...

最新文章

  1. python3基本知识_Python3 - 基础知识、基本了解
  2. _​_​i​n​t​6​4​ ​与​l​o​n​g​ ​l​o​n​g​ ​i​n​t
  3. ubuntu Mysql乱码解决
  4. lambda创建线程
  5. 【抽奖】若川诚邀你加前端群,长期交流学习~
  6. vba 修改文本文档 指定行_VBA程序报错,用调试三法宝,bug不存在的
  7. mysql中的联结_MySQL的联结(Join)语法
  8. AI 智能会议系统(36)——-外呼失败场景如何处理?
  9. 小学计算机课评价方案,小学信息技术课堂评价方法的研究
  10. Olympic Games -basketball
  11. android: listview与sqlite数据操作实例
  12. 【VC++类型转换】CString和System::String类型的转换
  13. 游戏开发项目管理那些事
  14. c++builder excel 插入分页符
  15. 用Spotlight实时监控Windows Server 08
  16. Linux 中的rsh,ssh
  17. mysql 推送微信公众号_10分钟完成微信公众号第三方平台全网发布
  18. quartus频率计 时钟设置_Quartus II EDA频率计设计
  19. NIST随机数检测软件使用
  20. PHP文字转语音排号声音_百度文字转语音免费接口使用实例

热门文章

  1. ubuntu mongodb安装
  2. [xmind] ASP.NET 设计模式 - UX 用户体验
  3. android的GCM研究
  4. 前端面试有这几篇就够了--HTML篇
  5. jpeg 转bmp代码_代码写得很牛逼但UI界面却搞得很丑?来,杨工带你!
  6. 虚拟机与ubuntu(二):连接访问
  7. python 类继承 baseclass_Python:Dataclass继承自base Dataclass,如何将值从base升级到新类?...
  8. FPGA 串口中断_正点原子【STM32-F407探索者】第九章 串口通信实验
  9. 抖音高贵气质的签名_笑言 | 非主流时期的QQ签名和杜蕾斯文案有的一拼。
  10. 【HDU3336】Count the String(kmp--每个前缀出现的次数)