TTTTTTTTTTTTTT poj 1127 Jack Straws 线段相交+并查集
题意:
有n个木棍,给出木棍的两个端点的x,y坐标,判断其中某两个线段是否连通(可通过其他线段连通)
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <vector>
#include <queue>
#include <map>
#include <algorithm>
#include <set>
using namespace std;
#define MM(a) memset(a,0,sizeof(a))
typedef long long ll;
typedef unsigned long long ULL;
const int mod = 1000000007;
const double eps = 1e-10;
const int inf = 0x3f3f3f3f;
const int big=50000;
int max(int a,int b) {return a>b?a:b;};
int min(int a,int b) {return a<b?a:b;};
int r[15];
struct node{
int x,y;
}p;
struct Line{
node a,b;
}line[15];
int neiji(node a,node b)
{
return a.x*b.x+a.y*b.y;
} int jian(node a,node b,node c)
{
return (b.x-a.x)*(c.y-a.y)-(c.x-a.x)*(b.y-a.y);
} int findr(int i)
{
if(i!=r[i])
r[i]=findr(r[i]);
return r[i];
}
void unite(int i,int j)
{
int ri=findr(i),rj=findr(j);
r[rj]=ri;
}
int solve(Line m,Line n)
{
if(min(m.a.x,m.b.x)<=max(n.a.x,n.b.x)&&
max(m.a.x,m.b.x)>=min(n.a.x,n.b.x)&&
min(m.a.y,m.b.y)<=max(n.a.y,n.b.y)&&
max(m.a.y,m.b.y)>=min(n.a.y,n.b.y)&&
jian(m.a,m.b,n.a)*jian(m.a,m.b,n.b)<=0&&
jian(n.a,n.b,m.a)*jian(n.a,n.b,m.b)<=0)
return 1;
return 0;
}//跨立实验判断线段相交
int main()
{
int n;
while(~scanf("%d",&n)&&n)
{ for(int i=1;i<=n;i++)
scanf("%d %d %d %d",&line[i].a.x,&line[i].a.y,&line[i].b.x,&line[i].b.y); for(int i=1;i<=n;i++)
r[i]=i; for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)/*并查集检验线段的连通性,注意是两层循环,每个i都将直接与其相连的加入它当前所在的集合*/
{
if(findr(i)==findr(j))continue;
if(solve(line[i],line[j]))
unite(i,j);
} while(1)
{
int a,b;
scanf("%d %d",&a,&b);
if(!a||!b) break;
if(findr(a)==findr(b))
printf("CONNECTED\n");
else
printf("NOT CONNECTED\n");
}
}
return 0;
}
分析:跨立实验模板+并查集
TTTTTTTTTTTTTT poj 1127 Jack Straws 线段相交+并查集的更多相关文章
- [poj 1127]Jack Straws[线段相交][并查集]
题意: 给出一系列线段,判断某两个线段是否连通. 思路: 根据线段相交情况建立并查集, 在同一并查集中则连通. (第一反应是强连通分量...实际上只要判断共存即可, 具体的方向啊是没有关系的..) 并 ...
- POJ 1127 Jack Straws (线段相交)
题意:给定一堆线段,然后有询问,问这两个线段是不是相交,并且如果间接相交也可以. 析:可以用并查集和线段相交来做,也可以用Floyd来做,相交就是一个模板题. 代码如下: #pragma commen ...
- poj1127 Jack Straws(线段相交+并查集)
转载请注明出处: http://www.cnblogs.com/fraud/ ——by fraud Jack Straws Time Limit: 1000MS Memory L ...
- TZOJ 1840 Jack Straws(线段相交+并查集)
描述 In the game of Jack Straws, a number of plastic or wooden "straws" are dumped on the ta ...
- poj 1127:Jack Straws(判断两线段相交 + 并查集)
Jack Straws Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 2911 Accepted: 1322 Descr ...
- POJ 1127 Jack Straws(计算几何)
题目链接 抄的模版,居然1Y了.就是简单的线段相交+并查集. #include <iostream> #include <cstring> #include <cstdi ...
- poj 1127 -- Jack Straws(计算几何判断两线段相交 + 并查集)
Jack Straws In the game of Jack Straws, a number of plastic or wooden "straws" are dumped ...
- TOJ1840: Jack Straws 判断两线段相交+并查集
1840: Jack Straws Time Limit(Common/Java):1000MS/10000MS Memory Limit:65536KByteTotal Submit: 1 ...
- hdu 1558 线段相交+并查集
题意:要求相交的线段都要塞进同一个集合里 sol:并查集+判断线段相交即可.n很小所以n^2就可以水过 #include <iostream> #include <cmath> ...
随机推荐
- (public丶private丶protected) 的理解
public(公有):公有的类成员可以在任何地方被访问. protected(受保护):受保护的类成员则可以被其自身以及其子类和父类访问. private(私有):私有的类成员则只能被其定义所在的类访 ...
- Django基础之模型层(下)
聚合查询 关键字:aggregate from django.db.models import Max,Min,Sum,Count,Avg 统计所有书的平均价格 models.Book.objects ...
- MySQL中的SQL的常见优化策略
MySQL中的SQL的常见优化策略 MySQL中的索引优化 MySQL中的索引简介 1 避免全表扫描对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索 ...
- 安装docker私有仓库
先安装docker:http://www.cnblogs.com/cjsblogs/p/8717304.html 安装私有仓库 #下载registry docker pull registry #制作 ...
- 怎么快速写好看的手机menu菜单
要达到这样的效果: <div class="menu"> <div class="menu-1"> <img alt=" ...
- Codeforces 1229A. Marcin and Training Camp
传送门 垃圾翻译毁一生怎么办 题目看错直接 $GG$ 首先所有 $a_i$ 重复出现的人全都可以加入 考虑剩下的人发现 $a$ 必须是初始那些人的子集才能加入(证明显然),设当前考虑的人为 $x$ 则 ...
- 第五篇 jQuery特效与动画
5.1 show()与hide()方法 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" &quo ...
- 无障碍开发(二)之ARIA role属性
role属性 role属性值 含义 HTML示意 说明 alert 表示警告 <p id="ajax_error_alert" role="alert"& ...
- Vue实例:vue2.0+ElementUI框架开发pc项目
开发前准备 vue.js2.0中文,项目所使用的js框架 vue-router,vue.js配套路由 vuex,状态管理 Element,UI框架 1,根据官方指引,构建项目框架 安装vue npm ...
- Hyperledger Fabric(1)基础架构
前言 在区块链的家谱里,第一代区块链系统是以比特币为代表的公链,主要实现的是数字货币的功能:第二代区块链系统是以以太坊平台为代表的公链,创造性的实现了智能合约.而第三代区块链系统,则是HyperLed ...