E. Tree Reconstruction 解析(思維)
Codeforce 1041 E. Tree Reconstruction 解析(思維)
今天我們來看看CF1041E
題目連結
題目
略,請直接看原題
前言
一開始完全搞錯題目意思,還以為每次會刪除一條邊

想法
注意到同一個點對\((a_i,b_i)\)如果出現\(k\)次,代表這兩點中間有\(k\)個比\(a_i\)小的點(記得\(a_i<b_i\))。
那麼我們只要先把所有點對保存起來(紀錄出現次數在一個\(map\)裡),並且記錄目前還可以放的點在一個\(vector<int>\ remains\)裡。排序點對從\(a_i\)最小的點對開始遍歷(\(a_i\)最小的點對拿最小的點是最保險的):對於一個點對\(ii=\{a_i,b_i\}\),我們看看目前還有沒有足夠的,比\(a_i\)小的點存在在\(remains\)裡可以放到\(a_i,b_i\)的中間(可以二分搜),若沒有就輸出\(NO\)。
最後要考慮一個情況:如果任何一個點對\((a_i,b_i)\)中的\(b_i<n\),這是不可能的,直接輸出\(NO\)。(因此,如果有解的話,\(n\)這個點會是所有點對的\(b_i\),所以以上的判斷就已經足夠判斷所有的\(NO\)的情況)
程式碼:
const int _n=1e5+10;
int t,n,a,b;
VI remains;
vector<PII> e,in;
map<PII,int> mp;
main(void) {ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
  cin>>n;rep(i,0,n-1){cin>>a>>b;if(a>b)swap(a,b);mp[{a,b}]++;in.pb({a,b});}
  rep(i,1,n+1)remains.pb(i); sort(all(in));
  for(PII ii:in){
    int tmp;
    if(!mp[ii])continue;
    if(ii.se<n){cout<<"NO\n";return 0;}
    if((tmp=upper_bound(all(remains),ii.fi-1)-remains.begin())<mp[ii]-1){cout<<"NO\n";return 0;}
    int prev=ii.fi;rep(i,tmp-mp[ii]+1,tmp)e.pb({prev,remains[i]}),prev=remains[i];
    e.pb({prev,ii.se});
    remains.erase(remains.begin()+tmp-mp[ii]+1,remains.begin()+tmp);
    rep(i,0,SZ(remains))if(remains[i]==ii.fi||remains[i]==ii.se)remains.erase(remains.begin()+i);
    mp[ii]=0;
  }cout<<"YES\n";for(PII ii:e)cout<<ii.fi<<' '<<ii.se<<'\n';
  return 0;
}
標頭、模板請點Submission看
Submission
E. Tree Reconstruction 解析(思維)的更多相关文章
- E. Tree Queries 解析(思維、LCA)
		Codeforce 1328 E. Tree Queries 解析(思維.LCA) 今天我們來看看CF1328E 題目連結 題目 給你一棵樹,並且給你\(m\le2e5\)個詢問(包含\(k\)個點) ... 
- E. Xenia and Tree 解析(思維、重心剖分)
		Codeforce 342 E. Xenia and Tree 解析(思維.重心剖分) 今天我們來看看CF342E 題目連結 題目 給你一棵樹,有兩種操作,把某點標成紅色或者查詢離某點最近的紅點有多遠 ... 
- D. Maximum Distributed Tree 解析(思維、DFS、組合、貪心、DP)
		Codeforce 1401 D. Maximum Distributed Tree 解析(思維.DFS.組合.貪心.DP) 今天我們來看看CF1401D 題目連結 題目 直接看原題比較清楚,略. 前 ... 
- A. Arena of Greed 解析(思維)
		Codeforce 1425 A. Arena of Greed 解析(思維) 今天我們來看看CF1425A 題目連結 題目 略,請直接看原題. 前言 明明是難度1400的題目,但總感覺不是很好寫阿, ... 
- E. Almost Regular Bracket Sequence 解析(思維)
		Codeforce 1095 E. Almost Regular Bracket Sequence 解析(思維) 今天我們來看看CF1095E 題目連結 題目 給你一個括號序列,求有幾個字元改括號方向 ... 
- C2. Power Transmission (Hard Edition) 解析(思維、幾何)
		Codeforce 1163 C2. Power Transmission (Hard Edition) 解析(思維.幾何) 今天我們來看看CF1163C2 題目連結 題目 給一堆點,每兩個點會造成一 ... 
- F. Moving Points 解析(思維、離散化、BIT、前綴和)
		Codeforce 1311 F. Moving Points 解析(思維.離散化.BIT.前綴和) 今天我們來看看CF1311F 題目連結 題目 略,請直接看原題. 前言 最近寫1900的題目更容易 ... 
- B. Two Arrays 解析(思維)
		Codeforce 1417 B. Two Arrays 解析(思維) 今天我們來看看CF1417B 題目連結 題目 略,請直接看原題. 前言 a @copyright petjelinux 版權所有 ... 
- C. k-Amazing Numbers 解析(思維)
		Codeforce 1417 C. k-Amazing Numbers 解析(思維) 今天我們來看看CF1417C 題目連結 題目 略,請直接看原題. 前言 我實作好慢... @copyright p ... 
随机推荐
- Docker镜像发布到阿里云
			登录阿里云Docker Registry $ sudo docker login --username=xxx@xxx.com registry.cn-hangzhou.aliyuncs.com 从R ... 
- spring in action-note-2
			1.AOP:在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.AOP是OOP的延续,是 ... 
- idea模拟前端向后台请求数据输出响应结果
			tools-httpClient-Test restful web service 通过上述步骤之后出现如下图 1 表示通过哪种方式请求:2 请求数据的地址头部:3 请求数据的除了头部之后的地址:4, ... 
- Apache shiro权限基本使用
			l shiro框架的核心功能:认证.授权.会话管理.加密 Application Code:应用程序代码,由开发人员负责开发的 Subject:框架提供的接口,代表当前用户对象 SecurityMan ... 
- Excel双击“单元格”后,自动跳转到相关“工作表
			Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)If Target.Column = ... 
- Java知识系统回顾整理01基础02面向对象03方法
			一.根据实例给出"方法"的定义 在LOL中,一个英雄可以做很多事情,比如超神,超鬼,坑队友 能做什么在类里面就叫做方法 比如队友残血正在逃跑,你过去把路给别人挡住了,导致他被杀掉. ... 
- JavaScript reduce()的使用
			语法 arr.reduce(callback(accumulator, currentValue, index, array), initialValue) 参数 callback 执行数组中每个值 ... 
- Java虚拟机系列——检视阅读
			Java虚拟机系列--检视阅读 参考 java虚拟机系列 入门掌握JVM所有知识点 2020重新出发,JAVA高级,JVM JVM基础系列 从 0 开始带你成为JVM实战高手 Java虚拟机-垃圾收集 ... 
- 最新最最最简单的Axure傻瓜式破解版教程(带下载地址)
			Axure 破解版下载 下载地址在文章末尾 Axure是什么? Axure RP是一款专业的快速原型设计工具.Axure(发音:Ack-sure),代表美国Axure公司:RP则是Rapid Prot ... 
- 16.Android-activity生命周期与启动模式
			1.activity共有4个状态 如下图所示: 运行状态 如果一个活动位于屏幕的前台(可见的),那么它就是活动的或正在运行的. 暂停状态 如果一个活动失去了焦点,但仍然可见(也就是说,一个新的非全尺寸 ... 
