题目链接

【分析】

很容易想到最大费用最大流。
但是蒟蒻只会打暴力直接被卡掉。。
那就想如何优化。暴力建图中对于每个(x[i]>=x[j]&&y[i]>=y[j])都建了边。那么数据中如果两千个点(i,i)。被卡的没脾气。
然后发现对于i能到j且j能到k,则为了利益最大化,不会直接从i到k。那么就加入这条剪枝。
还要考虑另外一个问题。一个点可能走2次,所以再加入一条边x’–>x”,流量为1,费用为0。

(dalao们都说这个剪枝很显然,蒟蒻很蓝瘦。。)

【建图】

  1. S –>S’ 流量为2,费用为0。
  2. S’–>x,x”–>T,流量均为1,费用均为0。
  3. x’–>x”两条边,流量均为1,一个费用为0,一个为1。
  4. 若i可达j,i”–>j’建边,流量为1,费用为0。(加上剪枝)

【代码】

#include <cstdio>
#include <iostream>
#include <queue>
#include <vector>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <stack>
#define N 4005
#define M 4000005
#define INF 1000000000
using namespace std;
typedef long long ll;
typedef pair<ll,ll> pa;int read()
{int x=0,f=1;char ch=getchar();while(!isdigit(ch)){if(ch=='-') f=-1;ch=getchar();}while(isdigit(ch)){x=x*10+ch-'0';ch=getchar();}return x*f;
}int n,m,K,cnt=1,S,T,ans;
int b[M],p[N],nextedge[M],w[M],c[M];
int Dis[N],Pre[N],A[2005];
bool Flag[N];class Node{public:int x,y;
}e[2005];bool operator <(Node a,Node b){return a.x==b.x?a.y<b.y:a.x<b.x;
}void Add(int x,int y,int z,int cost)
{cnt++;b[cnt]=y;nextedge[cnt]=p[x];p[x]=cnt;w[cnt]=z;c[cnt]=cost;
}void Anode(int x,int y,int z,int cost){Add(x,y,z,cost);Add(y,x,0,-cost);
}void Input_Init()
{n=read();T=n<<1|1;S=T+1;for(int i=1;i<=n;i++){e[i].x=read(),e[i].y=read();Anode(S,i,1,0);Anode(i,i+n,1,-1);Anode(i+n,T,1,0);Anode(i,i+n,1,0);}Anode(0,S,2,0);sort(e+1,e+1+n);for(int i=1;i<=n;i++){A[i]=e[i].y;int tmp=-1;for(int j=i-1;j;j--)if(A[j]<=A[i]&&A[j]>tmp)tmp=A[j],Anode(j+n,i,2,0);}
}bool Bfs()
{queue<int>q;q.push(0);for(int i=1;i<=S;i++) Dis[i]=INF;while(!q.empty()){int k=q.front();q.pop(); Flag[k]=0;for(int i=p[k];i;i=nextedge[i]){int v=b[i],f=w[i];if(Dis[v]>Dis[k]+c[i]&&f){Dis[v]=Dis[k]+c[i];Pre[v]=i;if(!Flag[v]){Flag[v]=1;q.push(v);}}}}return Dis[T]!=INF;
} void Mcf()
{int Maxf=INF;for(int i=Pre[T];i;i=Pre[b[i^1]])Maxf=min(Maxf,w[i]);for(int i=Pre[T];i;i=Pre[b[i^1]]){w[i]-=Maxf;w[i^1]+=Maxf;ans-=c[i]*Maxf;}
}void MCF()
{while(Bfs())Mcf();printf("%d\n",ans);
}int main()
{Input_Init();MCF();return 0;
}

BZOJ1930: [Shoi2003]pacman 吃豆豆相关推荐

  1. bzoj 1930: [Shoi2003]pacman 吃豆豆 [费用流]

    1930: [Shoi2003]pacman 吃豆豆 题意:两个PACMAN吃豆豆.一开始的时候,PACMAN都在坐标原点的左下方,豆豆都在右上方.PACMAN走到豆豆处就会吃掉它.PACMAN行走的 ...

  2. 【BZOJ 1930】 [Shoi2003]pacman 吃豆豆 最大费用最大流

    如果你知道他是网络流的话你就很快会想到一个最大费用最大流的模型,然后你发现可能T,然而你发现你只用增广两次,然后你就开心的打了出来,然后发现被稠密图里spfa的丧病时间复杂度坑了,还是会T.于是我就开 ...

  3. 1930: [Shoi2003]pacman 吃豆豆

    由于自己太沙茶,WA了8次才过,还是卡着内存过得(65420kb) 首先肯定拆点求最大费用最大流就对了. 最朴素的方法就是对于任意两点i,j能从i走到j就从i的出点向j的入点连边,然后就会发现,不仅T ...

  4. [SHOI2003]吃豆豆(dp+拓扑排序)

    [SHOI2003]吃豆豆 蒟蒻的 第一篇blog,请各位大犇多多指正 题目描述 两个PACMAN吃豆豆.一开始的时候,PACMAN都在坐标原点的左下方,豆豆都在右上方.PACMAN走到豆豆处就会吃掉 ...

  5. [SHOI2003]吃豆豆

    题目描述 两个PACMAN吃豆豆.一开始的时候,PACMAN都在坐标原点的左下方,豆豆都在右上方.PACMAN走到豆豆处就会吃掉它.PACMAN行走的路线很奇怪,只能向右走或者向上走,他们行走的路线不 ...

  6. 在Touch Bar上模拟吃豆豆游戏你想试试吗?

    Pac-Bar for mac是一个macOS应用,可在Touch Bar上模拟吃豆豆游戏.经典的街机体验轻松触手可及,玩转Touch Bar,你还等什么! Pac-Bar安装教程 下载软件完成后,打 ...

  7. 保姆级教学——Python+Pygame怎么实现吃豆豆游戏

    耽搁十几天的时间,我顺利的从阳转阴啦, 以后的日子一切恢复正常,好好工作,积极分享.希望在座的小伙伴阳了的全部健康转阴,没阳的全部不会变阳,新的一年,一切顺顺利利. 不知道最近大家学习得怎么样?有没有 ...

  8. 某易游戏经典吃豆豆动画404页面源码

    简介: 某易游戏的404错误页面,内容是经典的吃豆豆游戏,这个游戏可是一代人的回忆啊,卡通动画让普通的错误页不枯燥,超链接和logo图片需要自行更换,需要的小伙伴请点击下载 网盘下载地址: http: ...

  9. HTML5吃豆豆游戏开发实战(一)使用Canvas绘制游戏主角

    近期在学习HTML5.爱因斯坦曾说过,"最好的学习就是自己去经历". 于是.我想在学习HTML5的同一时候.做一款简单的小游戏,这样学习起来也会非常有趣的.我想做的是曾经小时候玩儿 ...

最新文章

  1. android textview参差不齐,android textView 排版显示参差不齐的解决方法
  2. Centos之压缩和解压缩命令
  3. 泛 归并排序 及 逆序对
  4. 水瓶座和什么座最配:天秤座,双子座,狮子座
  5. pyqt5讲解13:图形与特效,设置窗口大小
  6. 【Linux/Ubuntu】查询文件和文件夹大小
  7. iis 附件上传有点慢_短视频悄悄上线!“一起培训”的这个新功能有点潮
  8. Cacti监控Memcached时Count Stats和Memory/Structures没数据
  9. 代理模式和php实现
  10. 基础算法|Java递归算法练习
  11. oracle可视化操作界面——plsql dev安装配置与使用
  12. 更新驱动后计算机不能开机,(图文)Win10更新显卡驱动后无法开机进入系统
  13. 信用卡智能还款是什么,靠不靠谱?
  14. ESP8266制作物联网万能遥控器
  15. XiaomiRouter自学之路(13-U-boot支持web更新firmware功能)
  16. VCN 在windows和linux之间 复制粘贴
  17. cv2.imread()和cv2.cvtColor() 的使用
  18. C++ UML类图详解
  19. byte的范围为何是-128~127,而不是-127~128?
  20. 大数据Kylin(一):基础概念和Kylin简介

热门文章

  1. 新乡腰椎间盘突出 腰椎间盘突出如何治疗
  2. 人人车公布2019年新战略:成立8千万元基金 加大品牌广告投放
  3. Android Studio的Logcat/Run/Terminal/Build等窗口没有了怎么调出
  4. C++ operator=
  5. 用 Electron 打造 Win/Mac 应用,从「代码」到可下载的「安装包」,可能比你想得麻烦一点... 1
  6. 虚拟化概述与虚拟化应用场景
  7. 全球与中国洗地吸干机市场深度研究分析报告
  8. 利用计算机设计比率分析模型,计算机财务管理.pdf
  9. JS实现关闭当前子窗口,刷新父窗口及调用父窗口的方法
  10. Aegisub无法打开视频