Description

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

Input

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

Output

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

Sample Input

8

8 1

1 5

5 7

2 2

7 8

4 6

3 3

6 4

Sample Output

7

HINT

N < = 2000

Source

拼尽全力优化,最后还是超时1个点。。。

裸的费用流

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<queue>
  5. #include<algorithm>
  6. using namespace std;
  7.  
  8. const int INF=0x7fffffff;
  9.  
  10. struct Edge
  11. {
  12. int from,to,v,c,next;
  13. }E[];
  14. int node=;
  15. int head[],from[],dis[],vis[];
  16.  
  17. int n,ans,S,T;
  18. struct point
  19. {
  20. int x,y;
  21. }P[];
  22.  
  23. int read()
  24. {
  25. int x=,f=;char ch=getchar();
  26. while(ch<''||ch>''){if(ch=='-')f=-f;ch=getchar();}
  27. while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
  28. return x*f;
  29. }
  30.  
  31. void ins(int from,int to,int v,int c)
  32. {
  33. node++;
  34. E[node]=(Edge){from,to,v,c,head[from]};
  35. head[from]=node;
  36. }
  37.  
  38. void insert(int from,int to,int v,int c)
  39. {
  40. ins(from,to,v,c);ins(to,from,,-c);
  41. }
  42.  
  43. bool spfa()
  44. {
  45. queue<int> Q;
  46. for(int i=;i<=T;i++) dis[i]=-INF;
  47. Q.push();dis[]=;vis[]=;
  48. while(!Q.empty())
  49. {
  50. int q=Q.front();Q.pop();
  51. for(int i=head[q];i;i=E[i].next)
  52. if(E[i].v>&&dis[q]+E[i].c>dis[E[i].to])
  53. {
  54. dis[E[i].to]=dis[q]+E[i].c;
  55. from[E[i].to]=i;
  56. if(!vis[E[i].to])
  57. {
  58. Q.push(E[i].to);
  59. vis[E[i].to]=;
  60. }
  61. }
  62. vis[q]=;
  63. }
  64. return dis[T]!=-INF;
  65. }
  66.  
  67. void mcf()
  68. {
  69. int x=INF;
  70. for(int i=from[T];i;i=from[E[i].from])
  71. x=min(E[i].v,x);
  72. for(int i=from[T];i;i=from[E[i].from])
  73. {
  74. ans+=x*E[i].c;
  75. E[i].v-=x;E[i^].v+=x;
  76. }
  77. }
  78.  
  79. bool cmp(point a,point b)
  80. {
  81. return a.x<b.x||(a.x==b.x&&a.y<b.y);
  82. }
  83.  
  84. int main()
  85. {
  86. n=read();T=*n+;S=T-;
  87. for(int i=;i<=n;i++)
  88. P[i].x=read(),P[i].y=read();
  89. sort(P+,P+n+,cmp);
  90. insert(,S,,);
  91. for(int i=;i<=n;i++)
  92. {
  93. insert(S,i,,);
  94. insert(i,i+n,,);
  95. insert(i,i+n,,);
  96. insert(i+n,T,,);
  97. }
  98. for(int i=;i<=n;i++)
  99. {
  100. int inf=INF;
  101. for(int j=i+;j<=n;j++)
  102. {
  103. if(P[i].y<=P[j].y)
  104. {
  105. if(P[j].y<inf)
  106. insert(i+n,j,,);
  107. inf=min(inf,P[j].y);
  108. }
  109. }
  110. }
  111. while(spfa())
  112. mcf();
  113. printf("%d",ans);
  114. return ;
  115. }

[bzoj]1930 pacman吃豆豆的更多相关文章

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

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

  2. 1930: [Shoi2003]pacman 吃豆豆

    1930: [Shoi2003]pacman 吃豆豆 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 1969  Solved: 461[Submit][ ...

  3. 【BZOJ1930】[Shoi2003]pacman 吃豆豆 最大费用最大流

    [BZOJ1930][Shoi2003]pacman 吃豆豆 Description 两个PACMAN吃豆豆.一开始的时候,PACMAN都在坐标原点的左下方,豆豆都在右上方.PACMAN走到豆豆处就会 ...

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

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

  5. BZOJ1930 [Shoi2003]pacman 吃豆豆

     dp,首先建出图,f[i][j]表示a吃到了i点,b吃到了j点的最大值,转移的时候转移拓扑序小的那一维,如果i拓扑序小于j,那么转移到f[k][j],否则转移到f[i][k],建出的图边数也要优化, ...

  6. 【BZOJ1930】【SHOI2003】吃豆豆

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

  7. 洛谷 P4066 [SHOI2003]吃豆豆 解题报告

    P4066 [SHOI2003]吃豆豆 题目描述 两个PACMAN吃豆豆.一开始的时候,PACMAN都在坐标原点的左下方,豆豆都在右上方.PACMAN走到豆豆处就会吃掉它.PACMAN行走的路线很奇怪 ...

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

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

  9. css动画实现吃豆豆

    话不多说,直接上代码:(作为一个初学者写的代码,多么0基础都能看的懂吧.) HTML部分 <!DOCTYPE html> <html lang=en> <head> ...

随机推荐

  1. IBM Websphere MQ常用命令及常见错误

    MQSC: MQ Script Command  (不区分大小写) 注明: 下面命令行中的队列管理器名字,队列名字分别用QmgrName, QName替代. 下面标蓝色的,都需要根据实际配置更改! 打 ...

  2. blur和focus的运用

    这两个事件不仅仅只能运用与input.span之类的元素.还可以运用于window. 可以切换title. 当切换当前页面时,改变title的文字为‘离开了’. <!DOCTYPE html&g ...

  3. CC34:判断直线相交

    题目 解法 水题,判断斜率.判断截距,ok..... class CrossLine { public: bool checkCrossLine(double s1, double s2, doubl ...

  4. Codeforces Round #563 (Div. 2) B. Ehab Is an Odd Person

    链接:https://codeforces.com/contest/1174/problem/B 题意: You're given an array aa of length nn. You can ...

  5. Codeforces 1114F(欧拉函数、线段树)

    AC通道 要点 欧拉函数对于素数有一些性质,考虑将输入数据唯一分解后进行素数下的处理. 对于素数\(p\)有:\(\phi(p^k)=p^{k-1}*(p-1)=p^k*\frac{p-1}{p}\) ...

  6. (转)nginx应用总结(2)--突破高并发的性能优化

    原文:http://www.cnblogs.com/kevingrace/p/6094007.html 在日常的运维工作中,经常会用到nginx服务,也时常会碰到nginx因高并发导致的性能瓶颈问题. ...

  7. webpack分开打包和合并打包的瘦身

    webpack.config.js 记录一下优化webpack的几个点: 1.     devtool: false,   //产品阶段不应该有devtool entry: { bundle : pa ...

  8. [转] java实现https请求

    package com.lichmama.test.util; import java.io.ByteArrayOutputStream; import java.io.IOException; im ...

  9. 整合mybatis分页插件及通用接口测试出现问题

    严重: Servlet.service() for servlet [springmvc] in context with path [/mavenprj] threw exception [Requ ...

  10. 零基础逆向工程15_C语言09_位运算

    1.汇编中的移位指令 算数移位指令 指令格式:SAL/SAR Reg/Mem, CL/Imm SAL(Shift Arithmetic Left):算数左移 SAR(Shift Arithmetic ...