题目链接:?1318: 区间的连通性
参考博客:?wust oj 1318 区间的连通性(贪心)——wust_zwl的博客

Description

题目包含多组数据,你有一个集合,该集合的元素为形如(x,y)的区间,两个区间1:(a,b)、2:(c,d),如果c < a < d或者c < b < d说明1号区间能到达2号区间,当然如果2号区间能到3号区间的话,那么1号区间也能到达3号区间。(该性质具有传递性)
现在给你n个操作,操作分为两种:
1.“1 x y”(x < y),将区间加入集合中。(区间按照加入的顺序编号)
2.“2 a b”(a != b),问你第a个区间能否到达第b个区间。

Input

首先是一个n(1<=n<=200),表示操作数,然后有n行,每行有三个数,代表一个操作。
输入保证数据都在10^9的范围内。

Output

第2种操作时,如果a能到达b,输出“YES”,否则输出“NO”(不带引号)。

Sample Input

5
1 1 5
1 5 11
2 1 2
1 2 9
2 1 2

Sample Output

NO
YES

分析?

  • 显然区间端点需要保存,用int型的二维数组collection[201][2]即可。
  • 不同区间之间是否连通,直接用boolean型的二维数组connected[opNum + 1][opNum + 1]表示。
  • 操作1,将区间端点保存到collection中,并设置connected对应的能直接连通的值为true
  • 操作2,判断区间a和区间b是否连通,如果连通,直接输出YES,如果不连通,设置connected对应的能间接连通的值为true,然后再次判断是否连通,输出YES或者NO

易错点:不要想着统一输入完后,再输出。就拿Simple Input来说,会输出两个YES

代码

/*** Time 711ms* @author wowpH* @version 2.4* @date 2019年6月21日下午5:09:32* Environment: Windows 10* IDE Version: Eclipse 2019-3* JDK Version: JDK1.8.0_112*/import java.io.InputStreamReader;
import java.util.Scanner;public class Main {private int intervalNum;// 操作1的次数,也就是区间的个数// 集合,存储区间的端点,下标从1开始private int[][] collection = new int[201][2];private boolean[][] connected;// 存储区间是否连通private int a, b;// 操作的后两个数public Main() {Scanner sc = new Scanner(new InputStreamReader(System.in));int opNum, flag;// 总操作次数,操作类型(1或2)while (sc.hasNext()) {intervalNum = 0;// 初始化区间的个数opNum = sc.nextInt();// 总的操作次数connected = new boolean[opNum + 1][opNum + 1];// 存储区间是否连通for (int i = 0; i < opNum; ++i) {flag = sc.nextInt();// 操作类型a = sc.nextInt();b = sc.nextInt();if (1 == flag) {opOne();// 操作1} else {opTwo();// 操作2}}}sc.close();}// 操作1private void opOne() {++intervalNum;collection[intervalNum][0] = a;// 保存区间端点collection[intervalNum][1] = b;directlyConnected();// 直接连通}// 操作2private void opTwo() {if (true == connected[a][b]) {System.out.println("YES");// 区间b与区间c连通} else {indirectlyConnected();// 间接连通if (true == connected[a][b]) {System.out.println("YES");} else {System.out.println("NO");}}}// 直接连通private void directlyConnected() {for (int j = 1; j < intervalNum; ++j) {// 遍历前面的intervalNum-1个区间// 区间intervalNum可以到区间jif (collection[j][0] < a && a < collection[j][1]|| collection[j][0] < b && b < collection[j][1]) {connected[intervalNum][j] = true;}// 区间j可以到区间intervalNumif (a < collection[j][0] && collection[j][0] < b|| a < collection[j][1] && collection[j][1] < b) {connected[j][intervalNum] = true;}}}// 间接连通private void indirectlyConnected() {// 遍历所有区间,作为中间区间for (int center = 1; center <= intervalNum; ++center) {// 遍历所有区间,作为左边区间for (int left = 1; left <= intervalNum; ++left) {if (false == connected[left][center]) {continue;// 区间left和区间center不连通,继续下一个区间}// 区间left和区间center连通,遍历所有区间,作为右边区间for (int right = 1; right <= intervalNum; ++right) {// 区间center和right连通if (true == connected[center][right]) {connected[left][right] = true;// 传递性}}}}}public static void main(String[] args) {new Main();}
}

WUSTOJ 1318: 区间的连通性(Java)相关推荐

  1. WUSTOJ 1324: Base64 Coding(Java)未解决,求题解

    题目链接:1324: Base64 Coding 资料:ASCII码表 原文是英文,而且篇幅较长.因此下面不粘贴原文,只写中文大意. Description Base64是一种编码算法.它的工作原理是 ...

  2. java 数字区间_(Java实现) 整数区间

    一.题目描述 给n个区间,形式为[a, b],a和b均为整数,且a < b. 求一个最小的整数点的集合,使得每个区间至少2个不同的元素(整数点)属于这个集合. 求这个集合的元素个数. 输入 第1 ...

  3. WUSTOJ 1299: 结点选择(Java)

    题目链接:?1299: 结点选择 参考:?[Java] 蓝桥杯ALGO-4 算法训练 结点选择--柳婼 の blog Description 有一棵n个节点的树,树上每个节点都有一个正整数权值.如果一 ...

  4. java criteria and_criteria用法

    Criteria Query通过面向对象化的设计,将数据查询条件封装为一个对象.简单来讲,Criteria Query可以看作是传统SQL的对象化表示,如: Java代码 Criteria crite ...

  5. Palindrome subsequence HDU - 4632 区间dp|记忆化搜索

    // 区间dp import java.util.Scanner;/**** @author CN*/ public class main {static int mod = 10007;static ...

  6. 京东Java岗:来自面试官的夺命连环56问,你怀疑人生了吗?

    前言 今年,从java转到别的行业的人不少,也有不少人挤进这个市场想要分得一杯羹.年复一年,年年如此. 当然,Java程序员市场需求依然是比较大的,而且Java岗位晋升方向多,这就为许多人带去了机会. ...

  7. 京东Java岗:来自面试官的夺命连环56问,直接当场怀疑人生~

    前言 今年,从java转到别的行业的人不少,也有不少人挤进这个市场想要分得一杯羹.年复一年,年年如此.当然,Java程序员市场需求依然是比较大的,而且Java岗位晋升方向多,这就为许多人带去了机会.但 ...

  8. java取昨天日期_Java 获取昨天日期方法总结

    获取昨天日期用于判断时间数据是否所属昨日区间值,Java中java.util.Date类 new Date() 获取当前日期,具体代码如下:Date as = new Date(); SimpleDa ...

  9. 秒杀所有区间相关问题

    区间问题 所谓区间问题,就是线段问题,让你合并所有线段.找出线段的交集等等.主要有两个技巧: 排序.常见的排序方法就是按照区间起点排序,或者先按照起点升序排序,若起点相同,则按照终点降序排序.当然,如 ...

最新文章

  1. C++ 基础知识总结
  2. 高等数学·同济七版+线性代数第六版+概率论与数理统计第四版(教材+辅导)
  3. 【博士论文】机器学习中的标记增强理论与应用研究
  4. 笔记-项目成本管理-估算成本的步骤
  5. 机器学习(二十九)——Temporal-Difference Learning
  6. bzoj 1124 [POI2008]枪战Maf 贪心
  7. Spring MVC类型转换的意义
  8. python如何分别控制2个相同的窗口_Python入门到精通(2):使用Python计算数学算式...
  9. windows phone 8.0 的网络图片异步加载方案
  10. 功率放大器ADS仿真实例
  11. 《转载-Github上的python开源项目》
  12. 2022淘宝618超级喵运会怎么玩?2022淘宝618喵运会玩法技巧
  13. 夏至 | 心怀热忱,认真生活 ;不负时光,不负自己
  14. 印章、拿金币、数字游戏
  15. 编程思想-模块化-产品模块化设计:产品模块化设计
  16. 谈谈我对京东的认识(2):商业价值和前景分析
  17. Hbase的安装与shell操作介绍
  18. ubuntu下如何设置环境变量
  19. 解读Conflux的共识机制
  20. 在WRDS database上下载TAQ数据

热门文章

  1. w7如何关闭计算机防火墙,win7怎么关闭防火墙 win7自带防火墙启用或关闭方法
  2. Redis - 0、几款可视化工具
  3. WiFi遇到 无法连接到这个网络 的解决办法记录 ( netsh winsock reset )
  4. 新手php集成环境,php集成环境服务器xampp安装使用教程(适合第一次玩PHP的新手)...
  5. python配置文件
  6. 拼团商城是如何盈利的?
  7. 融资融券黑马选股分析系统主力意图大资金流出流入短线涨停板股票炒股软件
  8. 如何设置计算机自动连接宽带,Win7系统如何设置开机自动连接宽带?
  9. 每日获取强智教务系统课表,并发送短信到学生手机!爬虫真牛逼!
  10. Java编译错误与运行时错误区别