bzoj4427【Nwerc2015】Cleaning Pipes清理管道
题目描述
输入格式
输出格式
题解:
- 题目意思一些射线,端点不算交点,相交的射线只能放一个机器人,问是否有方案让每一个交点都被机器人经过;
- 如果A和B有交点,那么A放B不放,A不放B一定放,(多个交于一点也是符合题意的),转化成2-sat求解;
- 翻阅了官解,发现如果有交点A和B连边,二分图判定(因为合法的方案对应了二分图的某一边的点集);
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=;
int n,m,tot,id[N][],o=,hd[N<<],dfn[N<<],low[N<<],idx,st[N<<],top,bl[N<<],del[N<<],cnt;
struct Edge{int v,nt;}E[N*N*];
struct point{
int x,y;
point(int _x=,int _y=):x(_x),y(_y){};
point operator +(const point&A)const{return point(x+A.x,y+A.y);}
point operator -(const point&A)const{return point(x-A.x,y-A.y);}
bool operator ==(const point&A)const{return x==A.x&&y==A.y;}
int operator *(const point&A)const{return x*A.x+y*A.y;}
int operator ^(const point&A)const{return x*A.y-y*A.x;}
}p[N];
struct line{point a,b;}l[N];
void Adde(int u,int v){E[o]=(Edge){v,hd[u]};hd[u]=o++;}
void tarjan(int u){
dfn[st[++top]=u]=low[u]=++idx;
for(int i=hd[u];i;i=E[i].nt){
int v=E[i].v;
if(!dfn[v])tarjan(v),low[u]=min(low[u],low[v]);
else if(!del[v])low[u]=min(low[u],dfn[v]);
}
if(dfn[u]==low[u]){
int v;cnt++;
do{
bl[v=st[top--]]=cnt;
del[v]=;
}while(v!=u);
}
}
bool judge(int i,int j){
if(l[i].a==l[j].a)return false;
point a=l[j].a-l[i].a,b=l[j].b-l[i].a,c=l[i].b-l[i].a;
if((ll)(c^a)*(c^b)>)return false;
b=l[j].a-l[i].b,c=l[j].b-l[j].a;
if((ll)(c^a)*(c^b)>)return false;
return true;
}
int main(){
#ifndef ONLINE_JUDGE
freopen("bzoj4427.in","r",stdin);
freopen("bzoj4427.out","w",stdout);
#endif
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)scanf("%d%d",&p[i].x,&p[i].y);
for(int i=,x;i<=m;i++){
scanf("%d",&x);l[i].a=p[x];
scanf("%d%d",&l[i].b.x,&l[i].b.y);
id[i][]=++tot;id[i][]=++tot;
}
for(int i=;i<=m;i++)
for(int j=i+;j<=m;j++)if(i!=j&&judge(i,j)){
Adde(id[i][],id[j][]);
Adde(id[i][],id[j][]);
Adde(id[j][],id[i][]);
Adde(id[j][],id[i][]);
}
for(int i=;i<=tot;i++)if(!dfn[i])tarjan(i);
int fg=;for(int i=;i<=m;i++)if(bl[id[i][]]==bl[id[i][]]){fg=;break;}
puts(fg?"impossible":"possible");
return ;
}bzoj4427
bzoj4427【Nwerc2015】Cleaning Pipes清理管道的更多相关文章
- BZOJ1672: [Usaco2005 Dec]Cleaning Shifts 清理牛棚
1672: [Usaco2005 Dec]Cleaning Shifts 清理牛棚 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 414 Solved: ...
- BZOJ 1672: [Usaco2005 Dec]Cleaning Shifts 清理牛棚
题目 1672: [Usaco2005 Dec]Cleaning Shifts 清理牛棚 Time Limit: 5 Sec Memory Limit: 64 MB Description Farm ...
- BZOJ_1672_[Usaco2005 Dec]Cleaning Shifts 清理牛棚_动态规划+线段树
BZOJ_1672_[Usaco2005 Dec]Cleaning Shifts 清理牛棚_动态规划+线段树 题意: 约翰的奶牛们从小娇生惯养,她们无法容忍牛棚里的任何脏东西.约翰发现,如果要使这群 ...
- P4644 [Usaco2005 Dec]Cleaning Shifts 清理牛棚
P4644 [Usaco2005 Dec]Cleaning Shifts 清理牛棚 你有一段区间需要被覆盖(长度 <= 86,399) 现有 \(n \leq 10000\) 段小线段, 每段可 ...
- [Usaco2005 Dec]Cleaning Shifts 清理牛棚 (DP优化/线段树)
[Usaco2005 Dec] Cleaning Shifts 清理牛棚 题目描述 Farmer John's cows, pampered since birth, have reached new ...
- 【bzoj1672】[USACO2005 Dec]Cleaning Shifts 清理牛棚
题目描述 Farmer John's cows, pampered since birth, have reached new heights of fastidiousness. They now ...
- 【BZOJ1672】[Usaco2005 Dec]Cleaning Shifts 清理牛棚 动态规划
[BZOJ1672][Usaco2005 Dec]Cleaning Shifts Description Farmer John's cows, pampered since birth, have ...
- 洛谷P4644 [USACO2005 Dec]Cleaning Shifts 清理牛棚 [DP,数据结构优化]
题目传送门 清理牛棚 题目描述 Farmer John's cows, pampered since birth, have reached new heights of fastidiousness ...
- 【BZOJ】1672: [Usaco2005 Dec]Cleaning Shifts 清理牛棚(dp/线段树)
http://www.lydsy.com/JudgeOnline/problem.php?id=1672 dp很好想,但是是n^2的..但是可以水过..(5s啊..) 按左端点排序后 f[i]表示取第 ...
随机推荐
- 高可用OpenStack(Queen版)集群-9.Cinder控制节点集群
参考文档: Install-guide:https://docs.openstack.org/install-guide/ OpenStack High Availability Guide:http ...
- 【一】,python简单爬虫实现
一: 1.获取当前页的课程名称,地址:https://www.ichunqiu.com/courses/webaq 2.选取其中一门课程名称查看源代码: 代码如下: <p class=" ...
- 微信小程序开发调试技巧
1. 查看线上小程序console a. 先打开开发小程序console b. 再打开线上小程序,此时可以查看console
- [shell] 脚本之shift和getopts (转载)
转载地址:http://www.361way.com/shell-shift-getopts/4973.html 建议不熟悉getopts的朋友,此篇要看完,getopts部分内容在原作者上面有改动. ...
- 爬虫_处理js动态加载
1.selenium模块下载网页提取url,[煎蛋网] https://www.cnblogs.com/fat39/p/9865949.html#tag5 2.该网页加密了url,通过js获取图片.分 ...
- JSBridge实现示例
前言 参考来源 前人栽树,后台乘凉,本文参考了以下来源 Hybrid APP架构设计思路 marcuswestin/WebViewJavascriptBridge 楔子 本文介绍JSBridge的完整 ...
- 多种方法实现左右固定,中间自适应的CSS布局
布局是面试中常问的问题,尤其是这类的题目,怎么答才好呢? 大多数人的第一个方法是浮动,没错,浮动.第二个方法呢?你回答定位,没错.第三个方法呢?.... 第四个方法呢?第五个方法呢?.... 其实能想 ...
- charles使用教程 干货~
大部分内容来自前辈们的摘写,博客园是怎么去转载其他好的博呢~ 言归正传,教程看过后还是自己再来一遍理解和操作才会更加深刻. Charles 是在 Mac/WIN下常用的网络封包截取工具,在做移动开发时 ...
- PHP 更改session存储方式为Redis
前言: 服务器默认的session存放方式是file.当客户端发送请求带有PHPSESSID时是顺序的去比对session存储文件,如果有5000个session文件,那就有可能需要比对4998次那么 ...
- testng对执行失败的用例,再次执行
前段时间在网络上看到通过重写TestNG的接口,可以再次执行失败的测试用例,于是学习了,我之前的做法是当自己的脚本中碰到异常,就自动调用方法本身来达到再次执行用例的目的,这个过程中有设定重试的次数 对 ...