历时四天(本周三至本周六),本人的第一道网络流题目终于通过了…虽然这么慢才搞懂很大程度是因为脑子笨,但是还是要吐槽一下:

(1)选的这道题吧居然是无向图,对于初学者我表示呵呵,昨晚到现在一直在纠结怎么搞。一开始觉得在循环里加个j=0就好了,后来发现运行速度慢以为错了,后来才发现是自作聪明把书上一行代码给去掉了…QAQ

(2)这道题是多汇点,一开始还以为有x个汇点运行x次取最大呢,又脑残了;

(3)我的教材…写的是手动栈,虽然这免除了溢出,但是长度堪忧啊QAQ,而且数据才100根本不会溢出的啊…Anyway有空要把递归写法给写一下,不过手工栈的确很久没有码过了~~

至少这么一折腾,算是差不多懂了一些网络流算法,有空学一下Dinic。还有一周就要考试了,纯属酱油心态的我也要加油啦~

f表示flow也就是存储流,findpath和adjust这两个子段的名字太浅显了不解释了…s是手工栈。

  1. program vijos_p1524;
  2. var map,f:array[..,..] of longint;
  3. s,mark:array[-..] of integer;
  4. n,e,m,a,b,w,x,i,j:integer;
  5. ans,anst,top:longint;
  6. function findpath:boolean;
  7. begin
  8. fillchar(mark,sizeof(mark),);
  9. i:=;j:=;mark[]:=;top:=;s[top]:=;
  10. repeat
  11. i:=abs(s[top]);
  12. repeat
  13. j:=j+;
  14. if (mark[j]=) and (map[i,j]<>) then
  15. begin
  16. if map[i,j]>f[i,j] then
  17. begin
  18. inc(top);s[top]:=j;
  19. mark[j]:=;
  20. end
  21. else
  22. if f[j,i]> then
  23. begin
  24. inc(top);s[top]:=-j;
  25. mark[j]:=;
  26. end;
  27. end;
  28. until (j>=n+) or (i<>abs(s[top]));
  29. if i=abs(s[top]) then
  30. begin
  31. j:=abs(s[top]);
  32. mark[abs(s[top])]:=;
  33. s[top]:=;
  34. dec(top);
  35. end
  36. else j:=;
  37. until (top=) or (s[top]=x);
  38. findpath:=(top>);
  39. end;
  40.  
  41. procedure adjust;
  42. var i,j,k,x,z:longint;
  43. begin
  44. k:=;i:=s[k];z:=maxlongint;
  45. repeat
  46. inc(k);j:=s[k];
  47. if j< then x:=f[-j,i] else x:=map[i,j]-f[i,j];
  48. if x<z then z:=x;
  49. i:=abs(j);
  50. until k=top;
  51. k:=;i:=s[k];
  52. repeat
  53. inc(k);j:=s[k];
  54. if j< then
  55. begin
  56. f[-j,i]:=f[-j,i]-z;
  57. end
  58. else
  59. begin
  60. f[i,j]:=f[i,j]+z;
  61. end;
  62. i:=abs(j);
  63. until k=top;
  64. end;
  65.  
  66. procedure work;
  67. var j:integer;
  68. begin
  69. fillchar(f,sizeof(f),);
  70. anst:=;
  71. while findpath do adjust;
  72. for j:= to n+ do
  73. anst:=anst+f[,j];
  74. end;
  75.  
  76. begin
  77. readln(n,e);
  78. for i:= to e do
  79. begin
  80. readln(a,b,w);
  81. map[a,b]:=w;map[b,a]:=w;
  82. end;
  83. readln(m);
  84. for i:= to m do
  85. begin
  86. read(x);
  87. map[x,n+]:=maxlongint;
  88. end;
  89. x:=n+;{top:=1;s[top]:=1;mark[1]:=1;j:=0;}
  90. work;
  91. writeln(anst);
  92. end.

最小监视代价

[vijos P1524] 最小监视代价的更多相关文章

  1. vijos 1524 最小监视代价

    背景 看到Vijos上此类型的题目较少,特地放一道上来给大家练练. 描述 由于yxy小朋友做了一些不该做的事,他被jzp关进了一个迷宫里.由于jzp最近比较忙,疏忽大意了一些,yxy可以在迷宫中任意走 ...

  2. Vijos 1456 最小总代价 (状压dp)

    看到这道题n只有16,就可以想到状压dp 每个人只有经过或者没经过,那就用1表示经过,0表示没经过 但是不是当前在谁那里,所以再加一维来记录 所以f[state][i]表示在物品在i,当前的状态是st ...

  3. lintcode: 最小调整代价

    题目 最小调整代价 给一个整数数组,调整每个数的大小,使得相邻的两个数的差小于一个给定的整数target,调整每个数的代价为调整前后的差的绝对值,求调整代价之和最小是多少. 样例 对于数组,最小的调整 ...

  4. 【网络流24题】 No.12 软件补丁问题(最小转移代价 最短路)

    [题意] T 公司发现其研制的一个软件中有 n 个错误, 随即为该软件发放了一批共 m 个补丁程序. 每一个补丁程序都有其特定的适用环境, 某个补丁只有在软件中包含某些错误而同时又不包含另一些错误时才 ...

  5. 最小总代价 状压DP

    描述 n个人在做传递物品的游戏,编号为1-n. 游戏规则是这样的:开始时物品可以在任意一人手上,他可把物品传递给其他人中的任意一位:下一个人可以传递给未接过物品的任意一人. 即物品只能经过同一个人一次 ...

  6. BZOJ 3399 [Usaco2009 Mar]Sand Castle城堡:贪心【最小匹配代价】

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3399 题意: 给你一个数列a,和一个可变换顺序的序列b(数列长度≤25000). a增加一 ...

  7. [程序员代码面试指南]递归和动态规划-最小编辑代价(DP)

    问题描述 输入 原字符串StrOrg,目标字符串StrTarget,插入.删除.替换的编辑代价ic,dc,rc.输出将原字符串编辑成目标字符串的最小代价. 解题思路 状态表示 dp[i][j]表示把s ...

  8. VJP1456 最小总代价(状压)

    链接 这题卡了一天  刚开始没考虑第一个传的和最后一个传的 感觉挺简单 啪啪的敲完 居然还过了17组数据.. 正解:dp数组一维保存状态 一维保存当前传到了谁 再枚举是由谁传过来的 这样可以保证正确性 ...

  9. vijo 1456最小总代价

    题意:中文题... 题解:状态比较多,可以说是状压的基础题吧,我们定义dp[i][j],j为一个二进制数,每位0表示接触过该物品,1表示没有接触过;j表示当前物品在谁手上.递推的顺序注意一下就好 ac ...

随机推荐

  1. 精彩的解释CAP理论的文章

    强一致性(Consistency):  更新操作成功并返回客户端完成后,分布式的所有节点在同一时间的数据完全一致. 可用性(Availability):读和写操作都能成功. 分区容错性(Partiti ...

  2. 【转】eclipse安装SVN插件的两种方法

    转载地址:http://welcome66.iteye.com/blog/1845176 eclipse里安装SVN插件,一般来说,有两种方式: 直接下载SVN插件,将其解压到eclipse的对应目录 ...

  3. 【springMVC】简单的前后端数据交流

    最最常见两种,一则返回视图模板(文档),二则为json数据.就使用一个源代码文件来看看springmvc是怎么做到的. 1.UserController.java源代码文件 (这里额外的使用了fast ...

  4. 3个常用基于Linux系统命令行WEB网站浏览工具(w3m/Links/Lynx)

    一般我们常用的浏览器肯定是基于可视化界面的图文结合的浏览界面效果,比如FireFox.Chrome.Opera等等,但是有些时候折腾和项目 的需要,在Linux环境中需要查看某个页面的文字字符,我们需 ...

  5. HTTP笔记之一

    1  URL 统一资源定位符(URL)是资源标识符最常见的格式.大部分的URL都遵循一种标准格式,这种格式包含三个部分. URL的第一部分:方案(scheme),说明了访问资源所使用的协议类型.通常是 ...

  6. php : 单例设计演示

    单例 : 保证只有一个实例 <?php /* * 单例设计 */ // 单例: 只能"创造"出它的一个对象实例 class Single{ // 第一步: 私有化构造方法 p ...

  7. 焦点问题onfocus=”this.blur()”代替方法(转)

    为了去除链接的虚线框,网上搜索到最常见的方法是onfocus=“this.blur()”,不过同时搜索到的是这会不利于盲人浏览使用页面 在淘宝ued官方博客上详细说明了解决方法,这里转了部分,完整版: ...

  8. 如何管理linux开机自启服务

    如何管理linux开机自启服务? 自启动服务非常重要,例如 (1)需要手动添加希望自启的服务,如安装svn后没有自动添加,就需要我们手动加入(2)安装某些程序后,自动加到自启动了,但我们不需要,需要手 ...

  9. FACADE

    1 意图:为子系统中的一组接口提供一个一直的界面,Facade模式定义了一个高层接口.这个接口使得这一子系统更加容易使用, 2 动机,便于不需要更多功能的人通过Facade 简化使用 3 适用性: . ...

  10. __VA_ARGS__可变参数宏

    #define qWiFiDebug(format, ...) qDebug("[WiFi] "format" File:%s, Line:%d, Function:%s ...