Codeforces 1041 E

构造题。

给出一种操作,对于一棵树,去掉它的一条边。那么这颗树被分成两个部分,两个部分的分别的最大值就是这次操作的答案。

现在给出一棵树所有操作的结果,问能不能构造这样一颗树,可以的话输出它。

反正就是看每个数出现了几次,然后形成一条链,从这个数开始,依次减小,链向N。

这样处理每个数,就行了。 中间一旦有冲突(不能形成链了),直接NO。

#include <bits/stdc++.h>

using namespace std;

map<int,int> mp;

bool vis[1005];

struct node {
int l,r;
}; vector<node> ans;
int main() { int n; scanf("%d",&n); memset(vis,false,sizeof(vis));
int a,b;
for(int i = 1; i < n; i++) {
scanf("%d %d",&a,&b);
mp[a]++;
mp[b]++;
} if(mp[n] != n - 1) {
printf("NO\n");
return 0;
} node ad;
for(int i = 1; i < n; i++) { if(i - mp[i] + 1 < 1) {
printf("NO\n");
return 0;
}
int val = i;
if(!mp[val]) {
continue;
}
vis[val] = true; if(mp[val] == 1) {
ad.l = val;
ad.r = n;
ans.push_back(ad);
continue;
}
for(int j = 1; j < mp[i]; j++) {
int rr = val;
while(vis[val]) {
val--;
if(val < 1) {
printf("NO\n");
return 0;
}
}
vis[val] = true;
ad.l = val;
ad.r = rr;
ans.push_back(ad); }
ad.l = n;
ad.r = val;
ans.push_back(ad);
} printf("YES\n");
for(int i = 0; i < ans.size(); i++) {
printf("%d %d\n",ans[i].l,ans[i].r);
} return 0;
}

最新文章

  1. C++标准库:std_map作为一个关联数组
  2. Python Day9
  3. SQL提高查询效益之in、not in、between、like等条件讲述
  4. 笔记本禁用自带键盘攻略-------针对shift默认按下的解决方案
  5. 可视化swing界面编辑--转载
  6. I/O端口与I/O内存
  7. Winform与WPF对话框(MessageBox, Dialog)之比较
  8. C# QRCode、DataMatrix和其他条形码的生成和解码软件
  9. 【基础】常用的机器学习&amp;数据挖掘知识点
  10. 轻松搭建docker应用的mesos集群
  11. ado.net 参数传递之 in
  12. Struts2 基本的ResultType 【学习笔记】
  13. jdk7u79linuxx64.tar.gz下载
  14. Windows下查看硬连接引用技术
  15. 2018-2019-2 20165231王杨鸿永《网络对抗》Exp1 PC平台逆向破解
  16. Python——安装requests第三方库
  17. Eclipse的设置、调优、使用(解决启动卡顿等问题)----转
  18. C# 全屏坐标及区域坐标获取。自定义光标及系统光标描边捕捉显示。
  19. SpringMvc配置扫包之后,访问路径404问题解决
  20. “东信杯”广西大学第一届程序设计竞赛(同步赛)H

热门文章

  1. Codeforces Round #277.5 (Div. 2)-C. Given Length and Sum of Digits...
  2. cmake 指定输出目录
  3. Python3 try-except、raise和assert解析
  4. How To:Linux下如何通过命令检查网卡是否插上网线
  5. 【Office_Word】Word排版
  6. Re:从零开始的Linux之路(杂谈)
  7. 如何用纯 CSS 创作一个雷达扫描动画
  8. iOS设置UINavigationBar 的样式
  9. 折半查找,binarySearch
  10. keypoint &amp;&amp; DMatch