ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Number of Groups (区间重叠问题(时间线性)+贪心优化时间复杂度+优先队列(或者set))

2022-06-04 20:35:20  阅读:222  来源: 互联网

标签:ci set segments contains Number number test segment 复杂度


大佬的题解:CodeCraft-22 and Codeforces Round #795 (Div. 2) A-E - 知乎 (zhihu.com)
Number of Groups
time limit per test2 seconds
memory limit per test256 megabytes
inputstandard input
outputstandard output
You are given n colored segments on the number line. Each segment is either colored red or blue. The i-th segment can be represented by a tuple (ci,li,ri). The segment contains all the points in the range [li,ri], inclusive, and its color denoted by ci:

if ci=0, it is a red segment;
if ci=1, it is a blue segment.
We say that two segments of different colors are connected, if they share at least one common point. Two segments belong to the same group, if they are either connected directly, or through a sequence of directly connected segments. Find the number of groups of segments.


Input
Each test contains multiple test cases. The first line contains the number of test cases t (1≤t≤105). Description of the test cases follows.

The first line of each test case contains a single integer n (1≤n≤105) — the number of segments.

Each of the next n lines contains three integers ci,li,ri (0≤ci≤1,0≤li≤ri≤109), describing the i-th segment.

It is guaranteed that the sum of n over all test cases does not exceed 105.

Output
For each test case, print a single integer k, the number of groups of segments.

Example
inputCopy
2
5
0 0 5
1 2 12
0 4 7
1 9 16
0 13 19
3
1 0 1
1 1 2
0 3 4
outputCopy
2
3
Note
In the first example there are 5 segments. The segments 1 and 2 are connected, because they are of different colors and share a point. Also, the segments 2 and 3 are connected, and so are segments 4 and 5. Thus, there are two groups: one containing segments {1,2,3}, and the other one containing segments {4,5}.
View PROBLEM

思路:

  • 关键是 哪些区间是重叠的? , 时间线性思路 AcWing 906. 区间分组(200 +ms) - AcWing ,时间大小排序(入点和出点)入点就加入集合,出点就把他删除from集合,进入的点和集合内的点都是有交集的。
  • 合并的时候就用并查集就行了,最后判断 fa【i】=i,的个数
  • 但是要考虑时间复杂度,最坏的情况下,n^2(一直都是加入,每一次都要和前面的所有合并), 所以,只要合并一次,就把之前的合并点删掉,保留一个R最大的就行了
  • (因为他们已经是一个集合了呀,后面的点能和前面的合并,必定就一定可以和R最大的点合并),用优先队列处理

 

标签:ci,set,segments,contains,Number,number,test,segment,复杂度
来源: https://www.cnblogs.com/Lamboofhome/p/16342641.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有