• 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最大的点合并),用优先队列处理
  • 相关阅读:
    从aptitude 换回 apt-get .
    ubuntu 通过安装TOMCAT7
    第一次ubuntu使用的故障排除 ...the public key is not available: NO_PUBKEY...
    DES加密算法应用:分组加密模式
    使用“牛顿迭代法”求解方程
    html当中如何引用js文件
    javascript当中火狐的firebug如何单步调试程序?
    给出一个javascript的Helloworld例子
    java中讲讲PrintWriter的用法,举例?
    卷积和神经网络有什么关系?
  • 原文地址:https://www.cnblogs.com/Lamboofhome/p/16342641.html
Copyright © 2020-2023  润新知