题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1558

题意:P为画线段,Q为询问当前这条线段所在的集合有多少线段

题解:如果两条线段有交点,那么就连接这两个集合

 #include<cstdio>
#define FFC(i,a,b) for(int i=a;i<=b;++i) struct line{double x1,y1,x2,y2;}a[];
int n,t,ans,ed,tp,now,f[];double eps=1e-;char cmd[]; int is(line a,line b){
if(((a.x2-a.x1)*(b.y1-a.y1)-(b.x1-a.x1)*(a.y2-a.y1))*((a.x2-a.x1)*(b.y2-a.y1)-(b.x2-a.x1)*(a.y2-a.y1))>eps)return ;
if(((b.x2-b.x1)*(a.y1-b.y1)-(a.x1-b.x1)*(b.y2-b.y1))*((b.x2-b.x1)*(a.y2-b.y1)-(a.x2-b.x1)*(b.y2-b.y1))>eps)return ;
return ;
} int find(int x){return f[x]==x?x:(f[x]=find(f[x]));}
void merge(int x,int y){int xx,yy;if((xx=find(x))!=(yy=find(y)))f[xx]=yy;} int main(){
scanf("%d",&t);
while(t--){
scanf("%d",&n),ed=;
FFC(i,,n)f[i]=i;
FFC(i,,n){
scanf("%s",cmd);
if(cmd[]=='P'){
ed++,scanf("%lf%lf%lf%lf",&a[ed].x1,&a[ed].y1,&a[ed].x2,&a[ed].y2);
FFC(j,,ed-)if(is(a[j],a[ed]))merge(ed,j);
}else {
scanf("%d",&tp),ans=,now=find(tp);
FFC(i,,ed)if(find(i)==now)ans++;
printf("%d\n",ans);
}
}
if(t)puts("");
}
return ;
}

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

  1. 2018.08.02 hdu1558 Segment set(并查集+计算几何)

    传送门 这个直接用并查集维护. 每加入一条线段就将它与其他能相交的集合合并,维护一个size" role="presentation" style="posit ...

  2. 并查集(Disjoint Set)

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

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

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

  4. poj 1127 -- Jack Straws(计算几何判断两线段相交 + 并查集)

    Jack Straws In the game of Jack Straws, a number of plastic or wooden "straws" are dumped ...

  5. ZOJ 3521 Fairy Wars oj错误题目,计算几何,尺取法,排序二叉树,并查集 难度:2

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3521 ATTENTION:如果用long long 减小误差,这道题只能用 ...

  6. hdu 1558(计算几何+并查集)

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

  7. Gym - 100625G Getting Through 计算几何+并查集

    http://codeforces.com/gym/100625/attachments/download/3213/2013-benelux-algorithm-programming-contes ...

  8. SGU 128. Snake --- 暴力枚举+并查集+贪心+计算几何

    <传送门> 128. Snake time limit per test: 0.25 sec. memory limit per test: 4096 KB There are N poi ...

  9. hdu1558--并查集+判断线段相交

    简单的计算几何题,判断两线段是否相交.将相交的两线段使用并查集归到一类中.查询时输出线段对应集合中元素的个数. #include<stdio.h> struct Point{ double ...

随机推荐

  1. python安装pip

    pip类似RedHat里面的yum,安装Python包非常方便.本节详细介绍pip的安装.以及使用方法. 1.pip下载安装 1.1 pip下载 # wget "https://pypi.p ...

  2. Layui文件上传样式在ng-dialog不显示的问题处理

    1.项目业务改动,在一个弹窗页面加图片上传. 2.页面使用angular框架,图片上传使用layui的文件上传组件. js: layui.upload({ url: '/test/upload.jso ...

  3. Ubuntu 软件 安装 下载 及更新

    1  软件安装 sudo apt-get install 2 软件搜索 sudo   apt-cache search 3  系统已经安装了什么软件 dpkg  -l 是否确切安装了某软件 dpkg ...

  4. 对dpkg: error processing package xxx (--configure) 的处理

    这个问题是在在安装Deepdive时候碰到的,具体来说在执行 sudo apt-get update碰到的sudo mv /var/lib/dpkg/info/ /var/lib/dpkg/info_ ...

  5. Unity3D研究院之在把代码混淆过的游戏返混淆回来(七十七)

    最近一直在找如何在MAC上混淆Android的DLL,至今没能找到合适的,有大神知道记得告诉我喔.今天群里有人说了一个混淆代码和返混淆代码的工具de4dot ,不查不知道一查吓一跳.这玩意可以把别人混 ...

  6. CustomSummaryCalculate 用法

    private void gridView1_CustomSummaryCalculate(object sender, DevExpress.Data.CustomSummaryEventArgs ...

  7. hdu1025

    #include<stdio.h>const int MAXN=500010;int a[MAXN],b[MAXN]; //用二分查找的方法找到一个位置,使得num>b[i-1] 并 ...

  8. JS复习:第三章&第四章

    第三章 一.把一个值转换成字符串的两种方法: 1.使用每个值都有的toString( )方法.这个方法唯一要做的就是返回相应值的字符串表现.例如: var age = 11 ; var ageAsSt ...

  9. ubuntu环境下docker安装步骤

    本文是根据docker官方文档翻译,原文:https://docs.docker.com/engine/installation/linux/ubuntulinux/ Docker 支持以下 Ubun ...

  10. WEB前端组件思想【分页】

    DEMO1: 很早就想写一些功能性的组件,无奈技术有限一点一点的边工作,边学. 近日工作中用到分页功能,当然由于加快业务进度,第一选择肯定是选择插件,但是实用性来说,还是有那么一点不适合.毕竟插件是通 ...