博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Codeforces Round #318 [RussianCodeCup Thanks-Round] (Div. 1) C. Bear and Drawing
阅读量:5089 次
发布时间:2019-06-13

本文共 2152 字,大约阅读时间需要 7 分钟。

题目链接:http://codeforces.com/contest/573/problem/C

题目大意:在两行无限长的点列上面画n个点以及n-1条边使得构成一棵树,并且要求边都在同一平面上且除了节点处任意两条边之间没有公共交点。给定n和n-1条边的关系,问这棵树能否满足要求地画在这个两行平行点列上?

解题思路:我们假设这么k一棵树已经被画好在了这个两行平行点列上,我们在其中选择最左边地点和最右边的点,并且设连接最左边的点和最右边的点为主链,可以发现,在树所在地区域内,主链会将剩下的区域划分为零个或多个一行区域。

 

                   只有两种类型地地子树能够插入到主链中:Y字母(Y-letter)和链(Line)。

                                     这里说的Y字母指的是长得像Y字母这样地三叉结构。

                      Y字母可以有很长的腿(legs)但是它的中心区域只能有一条边。

如果所给的树能够表示成一条主链和若干插入其上地Y字母和链,那么这就是一棵合法的树。

首先,我们递归地从每一个叶子节点开始标记删除度数<=2的结点(标记该结点地状态为删除,而不是真正删除该结点,从而不影响接下来度数地计算),直到遇到某一个节点度数>2为止,对于最后这个节点(度数>2地节点),我们不删除它,而是标记该节点的legs值加1.
最后,对于所有没有被标记为删除的点,如果该点满足"度数-min(legs,2)>1"(degree-min(legs,2)>1)这一条件,他就是"主链上的点",否则,它就是"Y字母的起点"。
如果所有"主链上的点"的相邻的"主链上地点"地数目均<=2,则答案为"Yes",否则答案为"No"。
Java代码:

import java.util.ArrayList;import java.util.List;import java.util.Scanner;public class Wuyouwulv {    private static final int maxn = 100010;    private static ArrayList
g[]; private static int[] legs = new int[maxn]; private static int[] degree = new int[maxn]; private static boolean[] del = new boolean[maxn]; private static void dfs(int u, int pa) { int sz = g[u].size(); if(sz > 2) { legs[u] ++; return; } del[u] = true; for(int v : g[u]) { if(v == pa) continue; dfs(v, u); } } public static void main(String[] args) { Scanner in = new Scanner(System.in); while(in.hasNext()) { int n = in.nextInt(); g = new ArrayList[n]; for(int i=0;i
(); for(int i=1;i
1) { int cnt = 0; for(int v : g[u]) { if(!del[v] && degree[v] - Math.min(legs[v], 2) > 1) { cnt ++; if(cnt > 2) { System.out.println("No"); return; } } } } } System.out.println("Yes"); return; } }}
View Code

 

转载于:https://www.cnblogs.com/wuyouwulv/p/codeforces573c.html

你可能感兴趣的文章
随机时间.排序,分出时 分 秒
查看>>
MyBatis开发环境搭建
查看>>
100阶乘末尾有多少个零
查看>>
Extjs fieldText内容
查看>>
安装php7.2
查看>>
fiex布局实例
查看>>
构建之法阅读笔记01
查看>>
Item 2:Prefer C++-style casts.(More Effective C++)
查看>>
Delegation and Core Location(Chapter 4 of iOS Programming: The Big Nerd Ranch Guide)
查看>>
HDU 4001 To Miss Our Children Time dp
查看>>
mina 通讯框架
查看>>
vue表格业务
查看>>
maven 配置说明
查看>>
js接收网页参数
查看>>
linux之查看端口占用
查看>>
[原创]浅谈互联网金融测试平台规划
查看>>
什么是网关及网关作用(转)
查看>>
skymvc网站测试之mysql数据生成
查看>>
Asp.Net Core WebApi 和Asp.Net WebApi上传文件
查看>>
android脚步---如何看log之程序停止运行,和UI线程和非UI线程之间切换
查看>>