其实没啥的。
离散化后,每行每列选择一个。
但是可能会相交
每行或每列相邻两个点成为一小段。
小段按照行列左右部点
小段有交,连inf边,每个s-左,右-t,连1
最小割。
输出方案真的很麻烦。。。
 
代码难度>思维含量的网络流,,,
#include<bits/stdc++.h>
#define reg register int
#define il inline
#define fi first
#define se second
#define mk(a,b) make_pair(a,b)
#define numb (ch^'0')
#define pb push_back
#define solid const auto &
#define enter cout<<endl
#define pii pair<int,int>
using namespace std;
typedef long long ll;
template<class T>il void rd(T &x){
char ch;x=;bool fl=false;while(!isdigit(ch=getchar()))(ch=='-')&&(fl=true);
for(x=numb;isdigit(ch=getchar());x=x*+numb);(fl==true)&&(x=-x);}
template<class T>il void output(T x){if(x/)output(x/);putchar(x%+'');}
template<class T>il void ot(T x){if(x<) putchar('-'),x=-x;output(x);putchar(' ');}
template<class T>il void prt(T a[],int st,int nd){for(reg i=st;i<=nd;++i) ot(a[i]);putchar('\n');}
namespace Modulo{
const int mod=;
int ad(int x,int y){return (x+y)>=mod?x+y-mod:x+y;}
void inc(int &x,int y){x=ad(x,y);}
int mul(int x,int y){return (ll)x*y%mod;}
void inc2(int &x,int y){x=mul(x,y);}
int qm(int x,int y=mod-){int ret=;while(y){if(y&) ret=mul(x,ret);x=mul(x,x);y>>=;}return ret;}
}
//using namespace Modulo;
namespace Miracle{
const int N=;
const int inf=0x3f3f3f3f;
int n;
struct node{
int nxt,to;
int w;
}e[*(N*N+N+N)];
int hd[*N],cnt=;
void add(int x,int y,int w){
e[++cnt].nxt=hd[x];
e[cnt].to=y;e[cnt].w=w;
hd[x]=cnt; e[++cnt].nxt=hd[y];
e[cnt].to=x;e[cnt].w=;
hd[y]=cnt;
}
int d[*N];
int s,t;
int dfs(int x,int flow){
if(x==t) return flow;
int res=flow;
for(reg i=hd[x];i&&res;i=e[i].nxt){
int y=e[i].to;
if(d[y]==d[x]+){
int k=dfs(y,min(res,e[i].w));
if(!k) d[y]=;
res-=k;
e[i].w-=k;
e[i^].w+=k;
}
}
return flow-res;
}
int q[*N],l,r;
bool bfs(){
l=,r=;
memset(d,,sizeof d);
q[++r]=t;
d[t]=t+;
while(l<=r){
int x=q[l++];
for(reg i=hd[x];i;i=e[i].nxt){
int y=e[i].to;
if(e[i^].w&&!d[y]){
d[y]=d[x]-;
q[++r]=y;
if(y==s) return true;
}
}
}
return false;
}
struct po{
int x,y;
po(){}
po(int xx,int yy){
x=xx;y=yy;
}
void op(){
ot(x);ot(y);
}
}p[N]; struct line{
int pos,l,r;
}X[N],Y[N];
int cx,cy; int th[N],hc;
int tl[N],lc;
vector<int>hang[N],lie[N];
vector<int>ex[N],ey[N];
bool jiao(line a,line b){
if((b.l<=a.pos&&a.pos<=b.r)&&(a.l<=b.pos&&b.pos<=a.r)) return true;
return false;
} bool vis[*N];
void fin(){
l=,r=;
q[++r]=s;
vis[s]=;
while(l<=r){
int x=q[l++];
// cout<<" fin "<<x<<endl;
for(reg i=hd[x];i;i=e[i].nxt){
int y=e[i].to;
if(!vis[y]&&e[i].w){
vis[y]=;
q[++r]=y;
}
}
}
// cout<<" visiv "<<endl;
// prt(vis,s,t);
} struct sol{
po a,b;
}ax[N],ay[N];
int ansx,ansy;
int main(){
rd(n);
for(reg i=;i<=n;++i){
rd(p[i].x);rd(p[i].y);
tl[++lc]=p[i].x;
th[++hc]=p[i].y;
}
sort(tl+,tl+lc+);
lc=unique(tl+,tl+lc+)-tl-;
sort(th+,th+hc+);
hc=unique(th+,th+hc+)-th-;
for(reg i=;i<=n;++i){
int tx=lower_bound(tl+,tl+lc+,p[i].x)-tl;
int ty=lower_bound(th+,th+hc+,p[i].y)-th;
hang[ty].pb(p[i].x);
lie[tx].pb(p[i].y);
}
for(reg i=;i<=lc;++i) sort(lie[i].begin(),lie[i].end());
for(reg i=;i<=hc;++i) sort(hang[i].begin(),hang[i].end());
for(reg i=;i<=lc;++i){
if(!lie[i].size()) continue;
int las=lie[i][];
for(reg j=;j<lie[i].size();++j){
int now=lie[i][j];
if(now->=las+){
++cx;
X[cx].pos=tl[i];
X[cx].r=now-;
X[cx].l=las+;
ex[i].pb(cx);
}
las=now;
}
}
for(reg i=;i<=hc;++i){
if(!hang[i].size()) continue;
int las=hang[i][];
for(reg j=;j<hang[i].size();++j){
int now=hang[i][j];
if(now->=las+){
++cy;
Y[cy].pos=th[i];
Y[cy].r=now-;
Y[cy].l=las+;
ey[i].pb(cy);
}
las=now;
}
}
s=;t=cx+cy+; for(reg i=;i<=cx;++i){
add(s,i,);
for(reg j=;j<=cy;++j){
if(jiao(X[i],Y[j])){
// cout<<" jiao "<<i<<" j "<<j<<endl;
add(i,j+cx,inf);
}
}
}
for(reg i=;i<=cy;++i){
add(i+cx,t,);
} while(bfs())while(dfs(s,inf)); fin();
// cout<<" cx "<<cx<<" cy "<<cy<<endl; for(reg i=;i<=lc;++i){ if(!lie[i].size()) continue;
int le=lie[i][],ri;
for(solid now:ex[i]){
if(vis[s]!=vis[now]){ ri=X[now].l-;
++ansx;
ax[ansx].a=po(X[now].pos,le);
ax[ansx].b=po(X[now].pos,ri);
le=X[now].r+;
}
}
ri=lie[i][lie[i].size()-];
++ansx;
ax[ansx].a=po(tl[i],le);
ax[ansx].b=po(tl[i],ri);
} for(reg i=;i<=hc;++i){
// cout<<" i "<<i<<" : "<<th[i]<<endl;
if(!hang[i].size()) continue;
int le=hang[i][],ri;
for(solid now:ey[i]){
if(vis[t]!=vis[now+cx]){
ri=Y[now].l-;
++ansy;
// cout<<" new "<<endl;
ay[ansy].a=po(le,Y[now].pos);
ay[ansy].b=po(ri,Y[now].pos);
le=Y[now].r+;
}
}
ri=hang[i][hang[i].size()-];
++ansy;
ay[ansy].a=po(le,th[i]);
ay[ansy].b=po(ri,th[i]);
} printf("%d\n",ansy);
for(reg i=;i<=ansy;++i){
ay[i].a.op();ay[i].b.op();puts("");
}
// puts("");
printf("%d\n",ansx);
for(reg i=;i<=ansx;++i){
ax[i].a.op();ax[i].b.op();puts("");
}
return ;
} }
signed main(){
Miracle::main();
return ;
} /*
Author: *Miracle*
*/
 

CF1054F Electric Scheme的更多相关文章

  1. 一句话题解&&总结

    CF79D Password: 差分.两点取反,本质是匹配!最短路+状压DP 取反是套路,匹配是发现可以把操作进行目的化和阶段化,从而第二次转化问题. 且匹配不会影响别的位置答案 sequence 计 ...

  2. Partition:Partiton Scheme是否指定Next Used?

    在SQL Server中,为Partition Scheme多次指定Next Used,不会出错,最后一次指定的FileGroup是Partition Scheme的Next Used,建议,在执行P ...

  3. Android业务组件化之URL Scheme使用

    前言: 最近公司业务发展迅速,单一的项目工程不再适合公司发展需要,所以开始推进公司APP业务组件化,很荣幸自己能够牵头做这件事,经过研究实现组件化的通信方案通过URL Scheme,所以想着现在还是在 ...

  4. iOS - URL Scheme 操作

    推荐JLRoutes路由跳转 NSScanner 在寻找更加灵活的页面跳转和通知,我遇见了JLRoutes,从而学习使用URL Scheme来定义界面入口.以前从来没有使用过,不过很多大厂和流行的框架 ...

  5. 自定义 URL Scheme 完全指南

    本文由 Migrant 翻译自 The Complete Tutorial on iOS/iPhone Custom URL Schemes,转载请注明出处. 注意: 自从自定义 URL 的引入,本文 ...

  6. JS魔法堂:Data URI Scheme介绍

    一.前言 上周五公司内部的Any Topic Conf.上我和同事们分享了这个主题,有同事说这个有用,有同事说这个没啥用,后来还延伸到网站性能的话题上,大家讨论的激烈程度让我觉得这次选题还不错.本篇先 ...

  7. CSS魔法堂:小结一下Box Model与Positioning Scheme

    前言  对于Box Model和Positioning Scheme中3种定位模式的细节,已经通过以下几篇文章记录了我对其的理解和思考.  <CSS魔法堂:重新认识Box Model.IFC.B ...

  8. Project、Target、Workspace and Scheme

    前言 今天有人问我Target和Project是什么关系?额...学习iOS开发都知道Target和Project的关系.这里我就简单的做了一个总结,而且加入的Scheme和Workspace.如果不 ...

  9. 自定义 URL Scheme 完全指南(转载)

    iPhone / iOS SDK 最酷的特性之一就是应用将其自身”绑定”到一个自定义 URL scheme 上,该 scheme 用于从浏览器或其他应用中启动本应用. 注册自定义 URL Scheme ...

随机推荐

  1. 笔记本最小安装centos7 连接WiFi的方法

    1.首先下载iw工具. yum -y install iw 2.获取无线网卡的名称 执行iw dev,假设获得名称为 wlp3s0(示例) 3.激活无线网络接口 执行ip link set wlp3s ...

  2. leetcode 76 dp& 强连通分量&并查集经典操作

    800. Similar RGB Color class Solution { int getn(int k){ return (k+8)/17; } string strd(int k){ char ...

  3. Oracle锁表查杀会话进程

    一.逐条--锁表 (1)查表名 和 sessionidselect b.owner,b.object_name,a.session_id,a.locked_mode from v$locked_obj ...

  4. Phpstrom学习笔记

    1.用*标识编辑过的文件 File - Editor – General - Editor Tabs 选中Mark modifyied tabs with asterisk

  5. Hdu 2389 二分匹配

    题目链接 Rain on your Parade Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 655350/165535 K (Ja ...

  6. JS---案例:旋转木马

    案例:旋转木马 页面加载时候出现的效果,script标签写在head里面,body上面 显示一个图片散开的动画,遍历之后,把每个图片用封装的动画函数移动到指定目标(同时改变多属性:宽,透明度,层级,t ...

  7. org.apache.jasper.JasperException: xxxx.jsp(118,24) Attribute style invalid for tag formatNumber according to TLD

    错误:org.apache.jasper.JasperException: /projm/projBudgetChangeOverview.jsp(118,24) Attribute style in ...

  8. C++学习笔记----2.4 C++对象的内存模型

    转载自:http://c.biancheng.NET/cpp/biancheng/view/2995.html点击打开链接 当对象被创建时,编译器会为每个对象分配内存空间,包括成员变量和成员函数. 直 ...

  9. Swift 之类的继承与类的访问权限

    http://www.cocoachina.com/swift/20160104/14821.html 上一篇博客<窥探Swift之别具一格的Struct和Class>的博客可谓是给Swi ...

  10. 来自 Spring Cloud 官方的消息,Spring Cloud Alibaba 即将毕业

    2019 年 7 月 24 日晚,Spring Cloud 官方发布公告: 仓库迁移是官方决定 Spring Cloud Alibaba 即将毕业 根据官方最新的发版规则,我们会把孵化器中的 Spri ...