棋盘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)) ------------------------------------------------------- ...
随机推荐
- 【CF MEMSQL 3.0 C. Pie Rules】
time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standa ...
- poj 1201 TYVJ 1415 Intervals
Description: 给定n个闭区间[ai,bi] 和n个整数ci,你需要构造一个集合Z,使得对于任何的i∈[1,n],Z中满足x∈[ai,bi]的x不少于ci个 求这样的整数集合Z至少包含多少个 ...
- Why is the ibdata1 file continuously growing in MySQL?
We receive this question about the ibdata1 file in MySQL very often in Percona Support. The panic st ...
- POJ2240:Arbitrage(最长路+正环)
Arbitrage Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 29374 Accepted: 12279 题目链接: ...
- springboot与dubbo结合
转:http://www.cnblogs.com/Alandre/p/6490142.html 写的很好! 本文提纲 一.为啥整合 Dubbo 实现 SOA 二.运行 springboot-dubb ...
- bzoj 4555 [Tjoi2016&Heoi2016]求和 NTT 第二类斯特林数 等比数列求和优化
[Tjoi2016&Heoi2016]求和 Time Limit: 40 Sec Memory Limit: 128 MBSubmit: 679 Solved: 534[Submit][S ...
- hadoop 架构
- js实现快速排序的方法
因为面试面到了这个问题,所以写一下,加深印象,有两种方法 第一种是通过两个for循环,每一次对比相邻两个数据的大小,小的排在前面,如果前面的数据比后面的大就交换这两个数的位置,这个方法就是比较次数太多 ...
- lesson 4 再谈继承多态,抽象类和接口
再谈多态,抽象类和接口 上一次博客已经概念性的概述了继承多态,抽象类和接口,这次来具体的谈一谈他们之间的联系和需要注意的地方. 一.继承和多态:Inheritance (继承) & Polym ...
- Flex UI刷新后保持DataGrid中的ScrollBar的位置不变
这是之前我发的一个贴子问题描述:http://q.cnblogs.com/q/53469/