hdu_1558_Segment set(并查集+计算几何)
题目连接: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(并查集+计算几何)的更多相关文章
- 2018.08.02 hdu1558 Segment set(并查集+计算几何)
		传送门 这个直接用并查集维护. 每加入一条线段就将它与其他能相交的集合合并,维护一个size" role="presentation" style="posit ... 
- 并查集(Disjoint Set)
		在一些有N个元素的集合应用问题中,我们通常是在开始时让每个元素构成一个单元素的集合,然后按一定顺序将属于同一组的元素所在的集合合并,其间要反复查找一个元素在哪个集合中.这一类问题其特点是看似并不复杂, ... 
- 【转】并查集&MST题集
		转自:http://blog.csdn.net/shahdza/article/details/7779230 [HDU]1213 How Many Tables 基础并查集★1272 小希的迷宫 基 ... 
- poj 1127 -- Jack Straws(计算几何判断两线段相交 + 并查集)
		Jack Straws In the game of Jack Straws, a number of plastic or wooden "straws" are dumped ... 
- ZOJ 3521 Fairy Wars oj错误题目,计算几何,尺取法,排序二叉树,并查集 难度:2
		http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3521 ATTENTION:如果用long long 减小误差,这道题只能用 ... 
- hdu 1558(计算几何+并查集)
		Segment set Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ... 
- Gym - 100625G Getting Through 计算几何+并查集
		http://codeforces.com/gym/100625/attachments/download/3213/2013-benelux-algorithm-programming-contes ... 
- SGU 128. Snake --- 暴力枚举+并查集+贪心+计算几何
		<传送门> 128. Snake time limit per test: 0.25 sec. memory limit per test: 4096 KB There are N poi ... 
- hdu1558--并查集+判断线段相交
		简单的计算几何题,判断两线段是否相交.将相交的两线段使用并查集归到一类中.查询时输出线段对应集合中元素的个数. #include<stdio.h> struct Point{ double ... 
随机推荐
- MYSQL 命令行导入导出数据库文件
			MYSQL命令行导入数据库 1.首先通过命令行进入到mysql安装目录的bin目录下,比如我输入的命令为: cd E:\MySQL\MySQL Server 5.5\bin,输入如下命令: mysql ... 
- Space Shooter
			项目:https://pan.baidu.com/s/1jIDe2H4 using UnityEngine; using System.Collections; namespace VoidGame ... 
- lr_abort()、exit(-1) 和 return-1之间的区别
			int status; status = web_url("Login", "URL=https://secure.computing.com//login.asp?us ... 
- zoj 1718 poj 2031 Building a Space Station
			最小生成树,用了Kruskal算法.POJ上C++能过,G++不能过... 算出每两个圆心之间的距离,如果距离小于两半径之和,那么这两个圆心之间的距离直接等于0,否则等于距离-R[i]-R[j]. # ... 
- Git回退到服务器某个版本正确姿势
			背景: Git协作中,成员不可避免地会提交一些错误的版本,由于Git相比SVN引入了本地仓库,操作会相对复杂,以下为姿势分解 找一个源文件RspUtils.java,加上一行注释 //测试回退git服 ... 
- python网络编程 — HTTP客户端
			A simple http client. It gets the contents of special webserver page and print it.(Default path is & ... 
- radio的选中设置以及取值。
			前台:<input type=" id="tg" name="state"/> <a style="cursor:poin ... 
- iOS开发之即时通讯之Socket(AsyncSocket)
			1.AsyncSocket介绍 如果需要在项目中像QQ微信一样做到即时通讯,必须使用socket通讯. iOS中Socket编程的方式: BSD Socket: BSD Socket 是UNIX系统中 ... 
- POJ 2773 Happy 2006#素数筛选+容斥原理+二分
			http://poj.org/problem?id=2773 说实话这道题..一点都不Happy好吗 似乎还可以用欧拉函数来解这道题,但正好刚学了容斥原理和二分,就用这个解法吧. 题解:要求输出[1, ... 
- hdu_5507_GT and strings(AC自动机)
			题目链接:hdu_5507_GT and strings 题意:给n个字符串和q个询问,每个询问给两个数字x,y,问1.x是否为y的子序列,2.x是否为y的子串,是输出1,否则输出0,每个询问输出2个 ... 
