其实没啥的。
离散化后,每行每列选择一个。
但是可能会相交
每行或每列相邻两个点成为一小段。
小段按照行列左右部点
小段有交,连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. 【洛谷P2722 USACO】 总分 01背包模板

    P2722 总分 Score Inflation 题目背景 学生在我们USACO的竞赛中的得分越多我们越高兴. 我们试着设计我们的竞赛以便人们能尽可能的多得分,这需要你的帮助 题目描述 我们可以从几个 ...

  2. windows 操作系统下git报filename too long 处理方法

    两种方法解决: 一是通过修改配置文件 [core] repositoryformatversion = filemode = false bare = false logallrefupdates = ...

  3. RSA 2019安全大会:企业资产管理成行业新风向标,云上安全占优势

    美国时间3月4-8日,国际知名信息安全峰会RSA Conference在美国旧金山开幕,云安全及云可以为企业提供更可靠的资产管理方式成为大会热点. 此次峰会共吸引全球700多家机构参展,其中近42%为 ...

  4. Django项目:CRM(客户关系管理系统)--16--08PerfectCRM实现King_admin显示注册表的字段表头

    # king_urls.py # ————————02PerfectCRM创建ADMIN页面———————— from django.conf.urls import url from king_ad ...

  5. 响应式布局及bootstrap(实例)

    说明: 这几天公司要求网站实现响应式布局,所以对响应式布局进行了相对全面的了解,并做了几个实例. 转载请注明源地址,谢谢^_^,http://www.cnblogs.com/liu-zhen/p/44 ...

  6. Python datetime模块的其他方法

  7. 调用Lua脚本print(xxx)报attempt to call a nil value (global 'print')错误

    在自己程序里调用Lua脚本print(xxx) 报出attempt to call a nil value (global 'print')错误 解决方法: luaopen_base(L); 或者 l ...

  8. [运维]VMware vSphere介绍 标签: 运维 2017-04-21 19:48 532人阅读 评论(17)

    大部分的程序员,应该是使用过vmware workstation的,我们用这款软件来创建虚拟机,满足我们学习或者工作的一些问题,今天介绍的是vmware家的另一款,不算是软件,比软件范围更大,VMwa ...

  9. Leetcode696.Count Binary Substrings计算二进制字串

    给定一个字符串 s,计算具有相同数量0和1的非空(连续)子字符串的数量,并且这些子字符串中的所有0和所有1都是组合在一起的. 重复出现的子串要计算它们出现的次数. 示例 1 : 输入: "0 ...

  10. POJ 2078

    16ms 解法: #include <cstdio> //using namespace std; ][]; ][]; ]; ]; int n,min,max; void solve(in ...