Codeforces Round #509 (Div. 2) E. Tree Reconstruction(构造)

news/2024/7/3 17:43:38

题目链接:http://codeforces.com/contest/1041/problem/E

题意:给出n - 1对pair,构造一颗树,使得断开其中一条边,树两边的最大值为 a 和 b 。

题解:显示最大值出现的次数为n - 1,且i点出现的次数小于等于i。一个数字 i(< n)出现的次数为 i 到 n 的距离,可构造出一条链使得满足条件。

 

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 #define ll long long
 4 #define LL __int128
 5 #define ull unsigned long long
 6 #define mst(a,b) memset((a),(b),sizeof(a))
 7 #define mp(a,b) make_pair(a,b)
 8 #define fi first
 9 #define se second
10 #define pi acos(-1)
11 #define pii pair<int,int>
12 #define pb push_back
13 const int INF = 0x3f3f3f3f;
14 const double eps = 1e-6;
15 const int MAXN = 1e3 + 10;
16 const int MAXM = 2e6 + 10;
17 const ll mod = 1e9 + 7;
18 
19 int du[MAXN];
20 
21 int main()
22 {
23 #ifdef local
24     freopen("data.txt", "r", stdin);
25 //    freopen("data.txt", "w", stdout);
26 #endif
27     int n;
28     scanf("%d",&n);
29     bool flag = true;
30     for(int i = 1; i < n; i++) {
31         int a,b;
32         scanf("%d%d",&a,&b);
33         du[a]++;
34         if(b != n) flag = false;
35     }
36     int now = 0;
37     for(int i = 1; i < n; i++) {
38         now += du[i];
39         if(now > i) flag = false;
40     }
41     if(!flag) {
42         puts("NO");
43         return 0;
44     }
45     puts("YES");
46     set<int>se;
47     for(int i = 1; i <= n; i++) se.insert(i);
48     int pre = -1;
49     for(int i = 1; i < n; i++) {
50         if(du[i]) {
51             if(pre != -1) printf("%d %d\n",pre,i);
52             pre = i;
53             du[i]--, se.erase(i);
54         }
55         while(du[i]) {
56             printf("%d %d\n",pre,*se.begin());
57             pre = *se.begin();
58             du[i]--, se.erase(se.begin());
59         }
60     }
61     printf("%d %d\n",pre,n);
62     return 0;
63 }

 

转载于:https://www.cnblogs.com/scaulok/p/9676629.html


http://www.niftyadmin.cn/n/4822155.html

相关文章

CCNA-ARP(地址解析协议) RARP(反向地址转换协议) 无故(免费)ARP

一、ARP&#xff08;地址解析协议&#xff09; 1、基本概念 地址解析协议&#xff0c;即ARP&#xff08;Address Resolution Protocol&#xff09;&#xff0c;是根据IP地址获取物理地址的一个TCP/IP协议。 主机发送信息时将包含目标IP地址的ARP请求广播到局域网络上的所有主…

CCNA-静态路由之扩展配置

一、环回接口 路由器上用来测试TCP/IP协议栈能否正常封装与解封装数据 1、PC 默认存在&#xff0c;127.0.0.1 //本地环回地址&#xff0c;用来测试本机TCP/IP协议栈能否正常工作 2、路由器 路由器也存在环回接口&#xff0c;为了测试路由器的TCP/IP协议栈能否正常工作&…

求两个数之间的质数 -----------基于for循环 算法思想

前端代码&#xff1a; <% Page Language"C#" AutoEventWireup"true" CodeFile"Default.aspx.cs" Inherits"_Default" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org…

CCNA-静态路由实验

实验要求&#xff1a; 1、根据实验要求&#xff0c;我们首先在Cisco packet tracer模拟器中搭建此网络拓扑图 2、然后我们就要开始做很重要的一步&#xff0c;就是地址规划。 R1-R4各需要4个环回&#xff0c;然后路由器的每一个接口需要一个网段&#xff0c;则一共需要14个网段…

SD-WAN来了,分支路由器就不要了?

路由软件和软件定义的WAN技术有可能取代分支机构中的传统路由器设备。现在很多组织正在向集成的SD-WAN替代方案迁移&#xff0c;为远程WAN站点提供带宽优先级和集中管理功能。 传统的分支路由器是围绕定制的专用集成电路和专用网络处理器设计的&#xff0c;以提供最佳的WAN性能…

tomcat解压版exe文件启动闪退问题

tomcat7.0之后好像不需要配置环境变量了&#xff0c;解压或安装后直接开启服务&#xff0c;在浏览器输入&#xff1a;localhost:8080就好了 解压后双击tomcat9w、tomcat9两个exe文件&#xff0c;出现闪退&#xff0c;但是双击startup.bat文件则会正常启动 在tomcat的bin文件夹有…

Linux编程 14 文件权限(用户列表passwd,用户控制shadow,useradd模板与useradd命令参数介绍)...

一. 概述 linux安全系统的核心是用户账户。 创建用户时会分配用户ID(UID)。 UID是唯一的&#xff0c;但在登录系统时不是用UID&#xff0c;而是用登录名。在讲文件权限之之前&#xff0c;先了解下linux是怎样处理用户账户的。以及用户账户需要的文件和工具&#xff0c;这样处理…

源码分析:HashMap

写在前面 作为以key/value存储方式的集合&#xff0c;HashMap可以说起到了极大的作用。因此关于HashMap&#xff0c;我们将着重使用比较大的篇幅。 接下来会用到的几个常量static final int DEFAULT_INITIAL_CAPACITY 1 << 4;static final int MAXIMUM_CAPACITY 1 <…