680: Jack Straws

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
const int N=20;
int f[N],n;
struct node{
	int x,y;
}p[N],q[N];
int check(int i,int j){
	if (max(q[i].x,p[i].x)<min(q[j].x,p[j].x)||
		max(q[i].y,p[i].y)<min(q[j].y,p[j].y)||
		max(q[j].x,p[j].x)<min(q[i].x,p[i].x)||
		max(q[j].y,p[j].y)<min(q[i].y,p[i].y))	
		return 0;
	
	int u=(p[j].x-p[i].x)*(q[i].y-p[i].y)-(q[i].x-p[i].x)*(p[j].y-p[i].y);
	int v=(q[j].x-p[i].x)*(q[i].y-p[i].y)-(q[i].x-p[i].x)*(q[j].y-p[i].y);
	int w=(q[i].x-p[j].x)*(q[j].y-p[j].y)-(q[j].x-p[j].x)*(q[i].y-p[j].y);
	int z=(p[i].x-p[j].x)*(q[j].y-p[j].y)-(q[j].x-p[j].x)*(p[i].y-p[j].y);
	return (u*v<=0&&w*z<=0);
}
int get(int x){
	return x==f[x]?x:f[x]=get(f[x]);
}
void union_set(){
	for(int i=1;i<=n;i++)
	{
		for(int j=i+1;j<=n;j++)	if(check(i,j))	f[get(i)]=get(j);
	}
}
int main(){
	while(cin>>n){
		for(int i=1;i<=n;i++)	f[i]=i;
		for(int i=1;i<=n;i++)	cin>>p[i].x>>p[i].y>>q[i].x>>q[i].y;
		union_set();
		int a,b;
		while(cin>>a>>b,a||b){
			if(get(a)==get(b))	cout<<"CONNECTED"<<endl;
			else	cout<<"NOT CONNECTED"<<endl;
		}
	}
	return 0;
}
相关推荐
PXM的算法星球6 分钟前
【leetcode】3524 求出数组的X值1
算法·leetcode·职场和发展
椰羊~王小美3 小时前
LeetCode -- Flora -- edit 2025-04-27
算法·leetcode·职场和发展
charade3123 小时前
【C语言】内存分配的理解
c语言·开发语言·c++
缘友一世3 小时前
从线性回归到逻辑回归
算法·逻辑回归·线性回归
前端_学习之路4 小时前
javaScript--数据结构和算法
javascript·数据结构·算法
weixin_428498495 小时前
使用HYPRE库并行装配IJ稀疏矩阵指南: 矩阵预分配和重复利用
算法·矩阵
雾削木6 小时前
mAh 与 Wh:电量单位的深度解析
开发语言·c++·单片机·嵌入式硬件·算法·电脑
__lost7 小时前
小球在摆线上下落的物理过程MATLAB代码
开发语言·算法·matlab
8RTHT7 小时前
数据结构(七)---链式栈
数据结构
Ethon_王8 小时前
走进Qt--工程文件解析与构建系统
c++·qt