传送门

这个直接用并查集维护。

每加入一条线段就将它与其他能相交的集合合并,维护一个size" role="presentation" style="position: relative;">sizesize域表示每个集合的大小。

代码:

#include<bits/stdc++.h>
#define eps 1e-15
using namespace std;
int t,fa[1005],n,siz[1005],cnt;
struct pot{double x,y;};
struct line{pot a,b;}l[1005];
inline int find(int x){return x==fa[x]?fa[x]:fa[x]=find(fa[x]);}
inline pot operator-(pot a,pot b){return (pot){a.x-b.x,a.y-b.y};}
inline double cross(pot a,pot b){return a.x*b.y-a.y*b.x;}
inline bool check(line a,line b){return (cross(a.a-b.a,a.b-b.a)*cross(a.a-b.b,a.b-b.b)<=eps)&&(cross(b.a-a.a,b.b-a.a)*cross(b.a-a.b,b.b-a.b)<=eps);}
int main(){
    scanf("%d",&t);
    while(t--){
        scanf("%d",&n),cnt=0;
        while(n--){
            char op[3];
            scanf("%s",op);
            if(op[0]=='P'){
                ++cnt,fa[cnt]=cnt,siz[cnt]=1;
                scanf("%lf%lf%lf%lf",&l[cnt].a.x,&l[cnt].a.y,&l[cnt].b.x,&l[cnt].b.y);
                for(int i=1;i<cnt;++i)
                    if(check(l[i],l[cnt])){
                        int fx=find(i);
                        if(fx==cnt)continue;
                        fa[fx]=cnt,siz[cnt]+=siz[fx];
                    }
            }
            else{
                int k,fx;
                scanf("%d",&k),printf("%d\n",siz[find(k)]);
            }
        }
        if(t)puts("");
    }
    return 0;
}

2018.08.02 hdu1558 Segment set(并查集+计算几何)的更多相关文章

  1. 2018.08.21 bzoj4668: 冷战(并查集+启发式合并)

    传送门 可以发现需要维护连通性和两点连通时间. 前者显然是并查集的常规操作,关键就在于如何维护两点的连通时间. 然后会想到这个时候不能用路径压缩了,因为它会破坏原本树形集合的结构,因此可以启发式按si ...

  2. 2021.08.03 P1197 星球大战(并查集)

    2021.08.03 P1197 星球大战(并查集) [P1197 JSOI2008]星球大战 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 重点: 1.可以离线处理.把在线变为离 ...

  3. hdu 1558 Segment set (并查集)

    Segment set Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Tota ...

  4. 2018.09.12 hdu2473Junk-Mail Filter(并查集)

    传送门 一开始开题还以为是平衡树. 仔细想了一想并查集就可以了. 合并操作没什么好说的. 删除操作:对于每个点记录一个pos值表示原来的点i现在的下标是什么. 每次删除点i是就新建一个点cnt,然后令 ...

  5. 2018.08.02 洛谷P3355 骑士共存问题(最小割)

    传送门 这题让我联想到一道叫做方格取数问题的题,如果想使摆的更多,就要使不能摆的更少,因此根据骑士的限制条件建图,求出至少有多少骑士不能摆,减一减就行了. 代码: #include<bits/s ...

  6. hdu_1558_Segment set(并查集+计算几何)

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1558 题意:P为画线段,Q为询问当前这条线段所在的集合有多少线段 题解:如果两条线段有交点,那么就连接 ...

  7. 并查集(Disjoint Set)

    在一些有N个元素的集合应用问题中,我们通常是在开始时让每个元素构成一个单元素的集合,然后按一定顺序将属于同一组的元素所在的集合合并,其间要反复查找一个元素在哪个集合中.这一类问题其特点是看似并不复杂, ...

  8. 【转】并查集&MST题集

    转自:http://blog.csdn.net/shahdza/article/details/7779230 [HDU]1213 How Many Tables 基础并查集★1272 小希的迷宫 基 ...

  9. 栈&队列&并查集&哈希表(julyedu网课整理)

    date: 2018-11-25 08:31:30 updated: 2018-11-25 08:31:30 栈&队列&并查集&哈希表(julyedu网课整理) 栈和队列 1. ...

随机推荐

  1. java.lang.ClassCastException: java.util.Arrays$ArrayList cannot be cast to java.util.ArrayList

    String[] 转换成 ArrayList 报的错. String[] str = {"A","B"}; ArrayList<String> li ...

  2. head 标签

    1.<meta - > <meta charset="UTF-8"> #utf-8字符编码 <meta http-equiv="Refres ...

  3. springmvc框架的搭建

    1引入jar包 jar包下载地址http://maven.springframework.org/release/org/ 以下是我引入的jar包 aopalliance-1.0.jaraspectj ...

  4. EXCEL保存提示“隐私问题警告:此文档中包含宏……”解决办法

    先点击“禁止宏运行”的那个按钮.打开文件后,按alt + F11 进入宏编辑器,在“工程”里查看是什么宏.如果是你需要的,就留着.否则右击这个宏名称,选择“移除”. 另外,如果是你需要的,还需要在 工 ...

  5. SharePoint 2010 外部数据类型

    需求描述: 在sharepoint 2010有时需要访问外部的数据(如sql数据库). 参考文章: 外部内容类型 Business Connectivity Services ECT外部内容类型 Se ...

  6. spring jpa exists

    Subquery<A> subquery = criteriaQuery.subquery(A.class);Root<A> root1 = subquery.from(A.c ...

  7. 【校招面试 之 剑指offer】第9-2题 用两个队列实现一个栈

    #include<iostream> #include<queue> using namespace std; // 对于出栈解决的思路是:将queue1的元素除了最后一个外全 ...

  8. pyhon模块之日志模块

    #Auther Bob#--*--coding:utf-8--*-- import logging #python一共有5个级别的日志,debug.info.warning.error.critica ...

  9. (hash map)Two Sum, sorted(排序+双指针)closest,小于或大于的对数,组成不同的对数

    原版 sorted [抄题]: [思维问题]: 存sum - nums[i](补集),若出现第二次则调出 [一句话思路]: hashmap中,重要的数值当做key,角标当做value. [画图]: [ ...

  10. 利用redis完成自动补全搜索功能(一)

    最近要做一个搜索自动补全的功能(目前只要求做最前匹配),自动补全就是自动提示,类似于搜索引擎,再上面输入一个字符,下面会提示多个关键词供参考,比如你输入 nb 2字符, 会自动提示nba,nba录像, ...