[AGC005C]Tree Restoring 构造
Description
给出一个数组a,要求构造一颗树,使节点x距离最远的点的距离为\(a_x\)。
Input
第一行一个正整数NN(2≤N≤1002≤N≤100)
接下来一行,有NN个正整数,描述序列a1,a2,...,aNa1,a2,...,aN(1≤ai≤N−11≤ai≤N−1)
Output
如果对于输入的序列存在这样的树,则输出"Possible",否则输出"Impossible"。二者皆不含引号。
Sample Input
#Sample Input 1
5
3 2 2 3 3
#Sample Input 2
3
1 1 2
#Sample Input 3
10
1 2 2 2 2 2 2 2 2 2
#Sample Input 4
10
1 1 2 2 2 2 2 2 2 2
#Sample Input 5
6
1 1 1 1 1 5
#Sample Input 6
5
4 3 2 3 4
Sample Output
#Sample Output 1
Possible
#Sample Output 2
Impossible
#Sample Output 3
Possible
#Sample Output 4
Impossible
#Sample Output 5
Impossible
#Sample Output 6
Possible
HINT
对于第一组样例,有如下美妙树:

黑边表示原树边,而红边表示的是距离每一个点最远的点是谁。
Sol
显然只要能把直径构造出来,那么剩下的点无论如何也能构造出来,首先判断最小的\(a_i\)能否达到\(直径长度\lceil\frac{直径长度}{2}\rceil\),然后我们枚举直径长度到\(直径长度\lceil\frac{直径长度}{2}\rceil\)的所有长度,如果不到两个那么就不可行,否则可行。注意如果直径长度是偶数的话\(直径长度\lceil\frac{直径长度}{2}\rceil\)有一个就可以了。
Code
#include <bits/stdc++.h>
using namespace std;
int a[105],b[105],n,mid,g;
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d",&a[i]),b[a[i]]++;
sort(a+1,a+n+1,greater<int>());mid=(a[1]+1)>>1,g=(a[1]&1)+1;
if(a[n]<mid||b[mid]!=g) return puts("Impossible"),0;
for(int i=a[1];i>mid;i--) if(b[i]<2) return puts("Impossible"),0;
puts("Possible");
}
[AGC005C]Tree Restoring 构造的更多相关文章
- Tree Restoring
Tree Restoring Time limit : 2sec / Memory limit : 256MB Score : 700 points Problem Statement Aoki lo ...
- ZOJ 3965 Binary Tree Restoring
Binary Tree Restoring 思路: 递归 比较a序列和b序列中表示同一个子树的一段区间,不断递归 代码: #include<bits/stdc++.h> using nam ...
- zoj 3965 Binary Tree Restoring(搜索)
Binary Tree Restoring Time Limit: 1 Second Memory Limit: 65536 KB Special Judge Given two ...
- C#结合Jquery LigerUI Tree插件构造树
Jquery LigerUI Tree是Jquery LigerUI()的插件之一,使用它可以快速的构建树形菜单.呵呵 废话不说了,直入正题,下面介绍C#结合ligerui 构造树形菜单的两种方法 1 ...
- VK Cup 2016 - Round 1 (Div. 2 Edition) C. Bear and Forgotten Tree 3 构造
C. Bear and Forgotten Tree 3 题目连接: http://www.codeforces.com/contest/658/problem/C Description A tre ...
- 2017浙江省赛 H - Binary Tree Restoring ZOJ - 3965
地址:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3965 题目: iven two depth-first-search ...
- AtCoder - 2061 Tree Restoring
Problem Statement Aoki loves numerical sequences and trees. One day, Takahashi gave him an integer s ...
- codeforce 1311E. Construct the Binary Tree (构造,就是个模拟)
ACM思维题训练集合 You are given two integers n and d. You need to construct a rooted binary tree consisting ...
- Huffman Tree 简单构造
//函数:构造Huffman树HT[2*n-1] #define MAXVALUE 9999//假设权值不超过9999 #define MAXLEAF 30 #define MAXNODE MAXLE ...
随机推荐
- ansibel---tag模块
如果你有一个大的剧本,你可以在不运行整个剧本的情况下运行一个特定的部分. 由于这个原因,两个游戏和任务都支持一个“标记:”属性.您只能根据命令行中的标记(标记或- skip- tags)对任务进行筛 ...
- 一个7重嵌套表EF添加语句,注意子表赋值过程中只需写子表主键赋值,不需要写子表外键=父表主键。EF创建时会自动将子表外键设为与父表主键相等
AIRPORT_HELIPORT tt = new AIRPORT_HELIPORT() { AIRPORT_HELIPORT_UUID = Gui ...
- SQL Server专题
SQL Server 2005/2008 一.连接异常 在C#代码中调用Open()方法打开数据库连接时(账户为sa),出现异常:异常信息如下: 在与 SQL Server 建立连接时出现与网络相关的 ...
- Python可执行对象——exec、eval、compile
Python提供的调用可执行对象的内建函数进行说明,涉及exec.eval.compile三个函数.exec语句用来执行存储在代码对象.字符串.文件中的Python语句,eval语句用来计算存储在代码 ...
- vc6.0出现“cannot add new member”解决办法
在编辑一个工程的时候,添加一个按钮,对这个按钮产生消息函数 双击按钮之后出现 cannot add new member 网上说删除.clw文件 我发现并没有这个后缀的文件 以下是我的操作办法: ...
- 只能在执行Render() 的过程中调用 RegisterForEventValidation;
October 17, 2008 3:28 PMMarch 29, 2013 8:28 PM Aillo 编程 0 Comments 在实现"将GridView中的数据导出到Exce ...
- RT2870移植到s3c2416后续验证无线…
我的无线网卡显示的事ra0,所以把下面的wlan0换成ra0即可:视自己的情况而定 1. 打开无线网卡电源 iwconfig wlan0 txpower on 2. 列出区域内的无线网络 iwlist ...
- 使用Nuget发布自己的类库包
NuGet是一个为大家所熟知的Visual Studio扩展,通过这个扩展,开发人员可以非常方便地在Visual Studio中安装或更新项目中所需要的第三方组件,同时也可以通过NuGet来安装一些V ...
- 面试中的C++常见问题
1.在C++ 程序中调用被C 编译器编译后的函数,为什么要加extern “C”? 答:首先,extern是C/C++语言中表明函数和全局变量作用范围的关键字,该关键字告诉编译器,其声明的函数和变量可 ...
- 【bzoj2144】跳跳棋
2144: 跳跳棋 Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 492 Solved: 244[Submit][Status][Discuss] ...