Java教程

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

本文主要是介绍Number of Groups (区间重叠问题(时间线性)+贪心优化时间复杂度+优先队列(或者set)),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
大佬的题解: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最大的点合并),用优先队列处理

 

这篇关于Number of Groups (区间重叠问题(时间线性)+贪心优化时间复杂度+优先队列(或者set))的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!