棋盘V
问题 A: 棋盘V
时间限制: 1 Sec 内存限制: 128 MB
提交: 150 解决: 3
[提交] [状态] [讨论版] [命题人:]
题目描述
现在小K要猜哪些格子是特殊格子。她知道所有格子的横坐标和纵坐标,但并不知道对应关系。换言之,她只有两个数组,一个存下了所有格子的横坐标,另一个存下了所有格子的纵坐标,而且两个数组都打乱了顺序。当然,小K猜的n个格子的位置也必须都不相同。
请求出一个最大的k,使得无论小K怎么猜,都能猜对至少k个格子的位置。
输入
接下来n行,每行描述一个特殊格子的位置。第i行含有两个整数xi和yi ,代表第i个格子的坐标。保证任意两个格子的坐标都不相同。
输出
样例输入
2
1 1
2 2
样例输出
0
提示
小K有可能会猜(1,2),(2,1),此时一个都没对
对于30%的数据,n≤8。
另外有5%的数据,所有横坐标和纵坐标均不相同。
另外有15%的数据,所有横坐标或者纵坐标均不相同。
对于100%的数据,n≤50,1≤xi,yi≤100000。
分析:费用流板子题,从裤裆里掏出费用流板子,魔改了两小时,终于能跑了。不说了,自闭了。
#include <iostream>
#include <string>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <vector>
#include <queue>
#include <deque>
#include <stack>
#include <map>
#define LL long long
#define equal ==
#define inf 0x3f3f3f3f
#define fr first
#define sc second
#define range(i,a,b) for(auto i=a;i<=b;++i)
#define itrange(i,a,b) for(auto i=a;i!=b;++i)
#define rerange(i,a,b) for(auto i=a;i>=b;--i)
#define fill(arr,tmp) memset(arr,tmp,sizeof(arr))
using namespace std;
const int mxn=int(1e5+);
int n,x[mxn],y[mxn],p[mxn],cnt,flag[][],ans;
namespace MCMF{
struct edge{
int head,to,nxt,cost,weight;
}edges[mxn];
bool vis1[mxn],vis2[mxn];
int S,T,sum1[mxn],sum2[mxn],d[mxn],tol=;
void add(int x,int y,int z,int p){
edges[tol].cost=p;edges[tol+].cost=-p;
edges[tol].weight=z;edges[tol+].weight=;
edges[tol].to=y;edges[tol+].to=x;
edges[tol].nxt=edges[x].head;edges[tol+].nxt=edges[y].head;
edges[x].head=tol++;edges[y].head=tol++;
}
bool spfa(){
fill(vis1,);fill(vis2,);fill(d,inf);
queue<int>q;
q.push(S);
d[S]=;
vis1[S]=;
while(not q.empty()){
int head=q.front();
q.pop();
vis1[head]=false;
for(int i=edges[head].head;i;i=edges[i].nxt){
int to=edges[i].to;
if(edges[i].weight and d[to]>d[head]+edges[i].cost){
d[to]=d[head]+edges[i].cost;
if(!vis1[to]){
vis1[to]=true;
q.push(to);
}
}
}
}
return d[T]!=inf;
}
int dfs(int to,int fs){
if(to equal T){
ans+=d[to]*fs;
return fs;
}
int ret=;
vis2[to]=true;
for(int i=edges[to].head;i;i=edges[i].nxt){
int tmp=edges[i].to;
if(edges[i].weight and not vis2[tmp] and d[tmp] equal d[to]+edges[i].cost){
int ntmp(dfs(tmp,min(fs-ret,edges[i].weight)));
edges[i].weight-=ntmp;
edges[i^].weight+=ntmp;
ret+=ntmp;
if(ret==fs)return ret;
}
}
return ret;
}
}
void init(){
scanf("%d",&n);
MCMF::S=(n<<)+;
MCMF::T=MCMF::S+;
range(i,,n){
scanf("%d%d",x+i,y+i);
p[++cnt]=*(x+i);
p[++cnt]=*(y+i);
}
sort(p+,p++cnt);
cnt=int(unique(p+,p++cnt)-p-);
range(i,,n){
x[i]=int(lower_bound(p+,p++cnt,x[i])-p);
y[i]=int(lower_bound(p+,p++cnt,y[i])-p);
using namespace MCMF;
++sum1[x[i]];
++sum2[y[i]];
flag[x[i]][y[i]]=true;
}
}
void solve(){
using namespace MCMF;
range(i,,cnt){
if(sum1[i])add(S,i,sum1[i],);
if(sum2[i])add(i+(n<<),T,sum2[i],);
}
range(i,,cnt)
range(j,,cnt){
if(flag[i][j])add(i,j+(n<<),,);
else add(i,j+(n<<),,);
}
while(spfa())dfs(S,inf);
printf("%d\n",ans);
}
int main() {
init();
solve();
return ;
}
棋盘V的更多相关文章
- 棋盘V(最小费用最大流)
棋盘V 时间限制: 1 Sec 内存限制: 128 MB提交: 380 解决: 44[提交] [状态] [讨论版] [命题人:admin] 题目描述 有一块棋盘,棋盘的边长为100000,行和列的 ...
- TYVJ1035 棋盘覆盖
时间: 1000ms / 空间: 131072KiB / Java类名: Main 描述 给出一张n*n(n<=100)的国际象棋棋盘,其中被删除了一些点,问可以使用多少1*2的多米诺骨牌进行掩 ...
- codevs2171 棋盘覆盖
题目描述 Description 给出一张n*n(n<=100)的国际象棋棋盘,其中被删除了一些点,问可以使用多少1*2的多米诺骨牌进行掩盖. 输入描述 Input Description 第一 ...
- BZOJ2706 : [SDOI2012]棋盘覆盖
A类数据: 将棋盘黑白染色,相邻的点之间连边,求出二分图最大匹配即可. B类数据: 答案为$\lfloor\frac{n^2-1}{3}\rfloor$,用FFT加速计算即可,时间复杂度$O(L\lo ...
- codevs 1049 棋盘染色
题目描述 Description 有一个5×5的棋盘,上面有一些格子被染成了黑色,其他的格子都是白色,你的任务的对棋盘一些格子进行染色,使得所有的黑色格子能连成一块,并且你染色的格子数目要最少.读入一 ...
- OpenGL立方体在世界坐标系中_缩放_旋转_平移_顶点片源着色器_光照作用_棋盘纹理贴图
读取bmp等图片格式中的像素还有难度,就先用这个棋盘图象素来弄了 代码打错一个就一直First-chance exception ,貌似还有一个要用q或者Q才能成功退出,不知道缺少哪句,我用窗口红叉退 ...
- bzoj 2706: [SDOI2012]棋盘覆盖 Dancing Link
2706: [SDOI2012]棋盘覆盖 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 255 Solved: 77[Submit][Status] ...
- NOI2012 魔幻棋盘
http://www.lydsy.com/JudgeOnline/problem.php?id=2877 二维线段树. 好恶...... B类数据: 棋盘是一维的. 我们有一个结论: $gcd(a_{ ...
- BZOJ 4000: [TJOI2015]棋盘( 状压dp + 矩阵快速幂 )
状压dp, 然后转移都是一样的, 矩阵乘法+快速幂就行啦. O(logN*2^(3m)) ------------------------------------------------------- ...
随机推荐
- C++——内存使用
内存分配方式: (1)从静态存储区域分配.内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在.例如全局变量,static变量. (2)在栈上创建.在执行函数时,函数内局部变量的存储单 ...
- C++——类继承以及类初始化顺序
对于类以及类继承, 几个主要的问题:1) 继承方式: public/protected/private继承. 这是c++搞的, 实际上继承方式是一种允许子类控制的思想. 子类通过public继承, 可 ...
- 如何实现加载DOM时执行js代码
有一些功能需求,需要在DOM载入时马上执行一些函数,但又不愿意仅为了这一个需求而引入整个JQuery库,于是就把jQuery的方法提取出来,单独使用了. 大家可以使用windows.onload事件, ...
- IOS 上传项目到github 终端操作
1.创建github账号 2.创建秘钥 3.Github配置秘钥 4.上传文件 复制保存网址 终端操作,如果没有ssh,自行安装 GitHub配置秘钥 克隆github上创建的项目 将自己的本地项目, ...
- 我自己的python开发环境
1.开发工具 eclipse 所有的版本下载: https://www.eclipse.org/downloads/index-packages.php , 我下载的是比较低的版本:https://w ...
- MDK stm32 仿真
直接选择simulator,仿真时报错 *** error 65: access violation at 0x40021000 : no 'read' permission 修改系统配置,原配置如下 ...
- codevs 3305 水果姐逛水果街Ⅱ&&codevs3006
题目描述 Description 水果姐第二天心情也很不错,又来逛水果街. 突然,cgh又出现了.cgh施展了魔法,水果街变成了树结构(店与店之间只有一条唯一的路径). 同样还是n家水果店,编号为1~ ...
- 在DirectX11下用Stencil Buffer绘制可视化Depth Complexity
这是一道在<Introduction to 3D Game Programming with DirectX 11>上的练习题. 要求把某个像素点上的Depth Complexity(深度 ...
- hdu 3003 Pupu
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3003 题目大意:一种动物身上有n种不同的皮肤,每种皮肤有透明很不透明两种状态,经过一天的日晒,透明的可 ...
- python通过POST提交页面请求
http://blog.csdn.net/liyzh_inspur/article/details/6294292 #网页POST提交数据 import urllibimport urllib2url ...