codeforces 1041 e 构造
2024-08-30 12:59:21
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;
}
最新文章
- C++标准库:std_map作为一个关联数组
- Python Day9
- SQL提高查询效益之in、not in、between、like等条件讲述
- 笔记本禁用自带键盘攻略-------针对shift默认按下的解决方案
- 可视化swing界面编辑--转载
- I/O端口与I/O内存
- Winform与WPF对话框(MessageBox, Dialog)之比较
- C# QRCode、DataMatrix和其他条形码的生成和解码软件
- 【基础】常用的机器学习&;数据挖掘知识点
- 轻松搭建docker应用的mesos集群
- ado.net 参数传递之 in
- Struts2 基本的ResultType 【学习笔记】
- jdk7u79linuxx64.tar.gz下载
- Windows下查看硬连接引用技术
- 2018-2019-2 20165231王杨鸿永《网络对抗》Exp1 PC平台逆向破解
- Python——安装requests第三方库
- Eclipse的设置、调优、使用(解决启动卡顿等问题)----转
- C# 全屏坐标及区域坐标获取。自定义光标及系统光标描边捕捉显示。
- SpringMvc配置扫包之后,访问路径404问题解决
- “东信杯”广西大学第一届程序设计竞赛(同步赛)H
热门文章
- Codeforces Round #277.5 (Div. 2)-C. Given Length and Sum of Digits...
- cmake 指定输出目录
- Python3 try-except、raise和assert解析
- How To:Linux下如何通过命令检查网卡是否插上网线
- 【Office_Word】Word排版
- Re:从零开始的Linux之路(杂谈)
- 如何用纯 CSS 创作一个雷达扫描动画
- iOS设置UINavigationBar 的样式
- 折半查找,binarySearch
- keypoint &;&; DMatch