P4066 [SHOI2003]吃豆豆

题目描述

两个PACMAN吃豆豆。一开始的时候,PACMAN都在坐标原点的左下方,豆豆都在右上方。PACMAN走到豆豆处就会吃掉它。PACMAN行走的路线很奇怪,只能向右走或者向上走,他们行走的路线不可以相交。 请你帮这两个PACMAN计算一下,他们俩加起来最多能吃掉多少豆豆。

输入输出格式

输入格式:

第一行为一个整数N,表示豆豆的数目。 接下来 N 行,每行一对正整数,表示第i个豆豆的坐标。任意两个豆豆的坐标都不会重合。

输出格式:

仅有一行包含一个整数,即两个PACMAN加起来最多能吃掉的豆豆数量

输入输出样例

输入样例#1:

8

8 1

1 5

5 7

2 2

7 8

4 6

3 3

6 4

输出样例#1:

7

说明:

N < = 2000


先考虑暴力一点的

其实应该算是个比较裸的费用流建模了。

拆点分别连容量和权值边各为1,代表通过这个点获得1且仅可以走一次。

源点1连源点2容量2,表示两个人走。其余容量inf,权值为0

关于两个人相交的部分,其实是无所谓的,可以交换

直接跑最大费用最大流即可


考虑优化

连边时连接了很多无用的边,比如某两个点本来就间接可达,又连接了直接的边。

我们可以只连间接可达的边。然而这样会出现问题,因为我们限制了一个点只能走一次。

好办,我们把拆的点再连一个容量为inf,权值为0的点,代表可以多次走但不产生答案

关于连边,按两个关键字排序以后,从左往右只连接x递增而y递减的边。其实有点计算几何的影子


Code:

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
const int N=4050;
const int M=400010;
const int inf=0xcfcfcfcf;
int head[N],edge[M],f[M],to[M],Next[M],cnt=1,t,ans;
void add(int u,int v,int w,int flow)
{
to[++cnt]=v;edge[cnt]=w;f[cnt]=flow;Next[cnt]=head[u];head[u]=cnt;
to[++cnt]=u;edge[cnt]=-w;f[cnt]=0;Next[cnt]=head[v];head[v]=cnt;
}
std::pair <int,int > dx[N>>1];
int n;
std::queue <int > q;
int dis[N],used[N],pre[N];
bool spfa()
{
memset(dis,0xcf,sizeof(dis));
dis[0]=0;
q.push(0);
while(!q.empty())
{
int u=q.front();
used[u]=0;
q.pop();
for(int i=head[u];i;i=Next[i])
{
int v=to[i],w=edge[i];
if(f[i]&&dis[v]<dis[u]+w)
{
dis[v]=dis[u]+w;
pre[v]=i;
if(!used[v])
{
used[v]=1;
q.push(v);
}
}
}
}
return dis[t]!=inf;
}
void augment()
{
ans+=dis[t];
int now=t;
while(now)
{
f[pre[now]^1]+=1;
f[pre[now]]-=1;
now=to[pre[now]^1];
}
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d%d",&dx[i].first,&dx[i].second);
std::sort(dx+1,dx+1+n);
for(int i=1;i<=n;i++)
{
int mi=-inf;
for(int j=i+1;j<=n;j++)
if(dx[j].second<mi&&dx[j].second>=dx[i].second)
{
add(i+n,j,0,-inf);
mi=dx[j].second;
}
}
t=n*2+2;
for(int i=1;i<=n;i++)
{
add(i,i+n,1,1);
add(i,i+n,0,-inf);
add(n*2+1,i,0,-inf);
add(i+n,t,0,-inf);
}
add(0,n*2+1,0,2);
while(spfa())
augment();
printf("%d\n",ans);
return 0;
}

2018.7.13

洛谷 P4066 [SHOI2003]吃豆豆 解题报告的更多相关文章

  1. 洛谷_Cx的故事_解题报告_第四题70

    1.并查集求最小生成树 Code: #include <stdio.h> #include <stdlib.h>   struct node {     long x,y,c; ...

  2. 洛谷 P3802 小魔女帕琪 解题报告

    P3802 小魔女帕琪 题目背景 从前有一个聪明的小魔女帕琪,兴趣是狩猎吸血鬼. 帕琪能熟练使用七种属性(金.木.水.火.土.日.月)的魔法,除了能使用这么多种属性魔法外,她还能将两种以上属性组合,从 ...

  3. 洛谷 P2317 [HNOI2005]星际贸易 解题报告

    P2317 [HNOI2005]星际贸易 题目描述 输入输出格式 输入格式: 输出格式: 如果可以找到这样的方案,那么输出文件output.txt中包含两个整数X和Y.X表示贸易额,Y表示净利润并且两 ...

  4. 洛谷 P2606 [ZJOI2010]排列计数 解题报告

    P2606 [ZJOI2010]排列计数 题目描述 称一个\(1,2,...,N\)的排列\(P_1,P_2...,P_n\)是\(Magic\)的,当且仅当对所以的\(2<=i<=N\) ...

  5. 洛谷1303 A*B Problem 解题报告

    洛谷1303 A*B Problem 本题地址:http://www.luogu.org/problem/show?pid=1303 题目描述 求两数的积. 输入输出格式 输入格式: 两个数 输出格式 ...

  6. 洛谷 P4100 [HEOI2013]钙铁锌硒维生素 解题报告

    P4100 [HEOI2013]钙铁锌硒维生素 题目描述 银河队选手名单出来了!小林,作为特聘的营养师,将负责银河队选手参加 宇宙比赛的饮食. 众所周知,前往宇宙的某个星球,通常要花费好长好长的时间, ...

  7. 洛谷 P4074 [WC2013]糖果公园 解题报告

    P4074 [WC2013]糖果公园 糖果公园 树上待修莫队 注意一个思想,dfn序处理链的方法,必须可以根据类似异或的东西,然后根据lca分两种情况讨论 注意细节 Code: #include &l ...

  8. 洛谷 P2473 [SCOI2008]奖励关 解题报告

    P2473 [SCOI2008]奖励关 题目描述 你正在玩你最喜欢的电子游戏,并且刚刚进入一个奖励关.在这个奖励关里,系统将依次随机抛出\(k\)次宝物,每次你都可以选择吃或者不吃(必须在抛出下一个宝 ...

  9. 洛谷 P2805 [NOI2009]植物大战僵尸 解题报告

    P2805 [NOI2009] 植物大战僵尸 题目描述 Plants vs. Zombies(PVZ)是最近十分风靡的一款小游戏.Plants(植物)和Zombies(僵尸)是游戏的主角,其中Plan ...

随机推荐

  1. scikit-learn API

    scikit-learn API 这是scikit-learn的类和函数参考.有关详细信息,请参阅完整的用户指南,因为类和功能原始规格可能不足以提供有关其用途的完整指南. sklearn.base:基 ...

  2. 网络基础知识-bps、Bps、pps的区别

    在计算机科学中,bit是表示信息的最小单位,叫做二进制位:一般用0和1表示.Byte叫做字节,由8个位(8bit)组成一个字节(1Byte),用于表示计算机中的一个字符.bit(比特)与Byte(字节 ...

  3. Ubuntu用户设置文件说明

    Ubuntu用户设置文件说明 Ubuntu作为Linux的一个发行版本,自然具有Linux系统的多用户特性.因为经常会使用和管理Ubuntu的用户,现将Ubuntu系统下的User的个性化配置整理如下 ...

  4. windows更改MySQL存储路径

    在C:\ProgramData\MySQL\MySQL Server 5.7文件夹 my.ini是默认的配置文件.在这里我们只更改数据存储路径.不更改配置文件 1 # Path to the data ...

  5. Office 365 Powershell 连接命令

    国内版 第一步: Import-Module msonline Connect-MsolService 输入用户名密码 第二步: Get-MsolUser" 第三步: Set-Executi ...

  6. PHP 整数

    实验环境php 5.2.17,参考资料:PHP手册 1.整数溢出 如果整数超出最大范围或者运算结果超出最大范围,都会转变成float <?php $a=2147483647; var_dump( ...

  7. Dubbo背景和简介

    转载出处 Dubbo开始于电商系统,因此在这里先从电商系统的演变讲起. 单一应用框架(ORM) 当网站流量很小时,只需一个应用,将所有功能如下单支付等都部署在一起,以减少部署节点和成本. 缺点:单一的 ...

  8. spark的运行方式——转载

    本文转载自:      spark的运行方式 本文主要讲述运行spark程序的几种方式,包括:本地测试.提交到集群运行.交互式运行 等. 在以下几种执行spark程序的方式中,都请注意master的设 ...

  9. Beautiful Year(拆分四位数)

    Description It seems like the year of 2013 came only yesterday. Do you know a curious fact? The year ...

  10. “Hello World!”团队第九次会议

    今天是我们团队“Hello World!”团队召开的第九次会议.博客内容: 一.会议时间 二.会议地点 三.会议成员 四.会议内容 五.todo list 六.会议照片 七.燃尽图 一.会议时间 20 ...