传送门
这个直接用并查集维护。
每加入一条线段就将它与其他能相交的集合合并,维护一个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;
}

转载于:https://www.cnblogs.com/ldxcaicai/p/9738401.html

2018.08.02 hdu1558 Segment set(并查集+计算几何)相关推荐

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

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

  2. 133.Python修炼之路【138-前端-JQuery-Json】2018.08.02

    json json是 JavaScript Object Notation 的首字母缩写,单词的意思是javascript对象表示法,这里说的json指的是类似于javascript对象的一种数据格式 ...

  3. 【转】并查集MST题集

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

  4. 判断线段相交(hdu1558 Segment set 线段相交+并查集)

    先说一下题目大意:给定一些线段,这些线段顺序编号,这时候如果两条线段相交,则把他们加入到一个集合中,问给定一个线段序号,求在此集合中有多少条线段. 这个题的难度在于怎么判断线段相交,判断玩相交之后就是 ...

  5. hdu1558计算几何加并查集

    不知道杭电题目分类是咋分的,这题我是在"匹配"里找到的,太假了.这明显是计算几何加并查集嘛.当然,并查集部分很简单,主要就是计算几何了,打了两个小时,我了个去,计算几何功底还是不行 ...

  6. 新手C#string类常用函数的学习2018.08.04

    ToLower()用于将字符串变为小写,注意字符串的不可变特性,需要重新赋值给另一个字符串变量. s = s.ToLower();//字符串具有不可变性,转换后需要重新赋值,不可仅有s.ToLower ...

  7. 2018.08.20高二互测

    2018.08.20 NOIp模拟赛 GKK大佬出的毒瘤题,烧脑.全是原题就不要密码保护了. 第一题 T1链接 ​ 一张图,每条边有代价也有限制,遍历过的点可以解锁这些限制,求最短路.这是一道套路题, ...

  8. 新手C#面向对象的学习2018.08.06

    class Person//声明一个Person类 {//类中的声明与Main中不同,类中声明的是字段而不是函数.public string gender;public string name=&qu ...

  9. http://southpeak.github.io/blog/2014/08/02/reactiv

    2019独角兽企业重金招聘Python工程师标准>>> http://southpeak.github.io/blog/2014/08/02/reactivecocoazhi-nan ...

最新文章

  1. CUDA学习3-GridBlock
  2. 微信小程序画布圆形进度条demo
  3. Android报错——connect failed: EHOSTUNREACH (No route to host)
  4. 矿用巷道巡检机器人_一种井下自动巡检机器人系统
  5. [Linux] 使用noatime属性优化文件系统读取性能
  6. linux内核之accept实现
  7. ai中如何插入签名_如何在PDF中插入一个或多个空白页?
  8. 改善深层神经网络:超参数调整、正则化以及优化——2.5 指数加权平均的偏差修正
  9. Java虚拟机笔记(五):JVM中对象的分代
  10. linux 文件查找帮助命令 , 查看网络链接信息, 历史命令
  11. datasource dbcp 数据源_数据源--.dbcp.BasicDataSource 使用
  12. 基于Python实现的Alpha-Beta剪枝算法
  13. 1 集群Linux环境搭建
  14. 中秋之际献上【中秋快乐】藏头诗
  15. 谷粒商城高级篇-商品上架
  16. 支付宝支付接口的使用
  17. 单片机/开发板连接配置的三种方式
  18. Elastic基本概念
  19. 竞赛资讯|阿里小蜜机器人跨语言短文本匹配算法竞赛
  20. solid works定义样条曲线

热门文章

  1. volley用法之 以post方式发送 json 参数
  2. maven搭建多模块项目和管理
  3. win8, VS2013 .NET 4.5在哪找svcutil.exe?
  4. hdu 1423 最长公共递增子序列
  5. 汇编的艺术(01)sizeof operator
  6. 【Web】JavaWeb项目为什么我们要放弃jsp?为什么要前后端解耦?为什么要前后端分离?2.0版,为分布式架构打基础。 - CSDN博客
  7. node --- Missing write access to 解决
  8. javascript --- 在linux上部署项目
  9. 团队开发git使用各种问题
  10. 1215 - Cannot add foreign key constraint