还是蛮简单的一道题,首先dfs一遍,在所有能到达放有干草的洞穴的所有路径中,找出路径上最小伐值的最大值,按这个值由小到大,再来一遍贪心就行了,能放就放,不能放拉倒(也可以理解为,不能放把最前一个删了)。

但是如果题目改为每个洞穴不止一堆干草的话,也是没有问题的,只要在队列上在维护一个小根堆,判断队列中最小的干草堆是否比当前小,小则替换,否则不变。

  1. const maxn=;
  2. type
  3. node=record
  4. f,t,w:longint;
  5. end;
  6. var n,i,j,m,k,u,v,x,now,ans:longint;
  7. head:array[..] of longint;
  8. b:array[..] of node;
  9. f:array[..] of longint;
  10. p:array[..] of boolean;
  11. a:array[..] of longint;
  12. max:array[..] of longint;
  13. function min(a,b:longint):longint;
  14. begin
  15. if a>b then exit(b)
  16. else exit(a);
  17. end;
  18. procedure insert(num,u,v,x:longint);
  19. begin
  20. b[num].f:=head[u];
  21. b[num].t:=v;
  22. b[num].w:=x;
  23. head[u]:=num;
  24. end;
  25. procedure qs(t,w:longint);
  26. var mid,l,r,tem:longint;
  27. begin
  28. l:=t; r:=w; mid:=max[a[(l+r) shr ]];
  29. repeat
  30. begin
  31. while max[a[l]]<mid do inc(l);
  32. while max[a[r]]>mid do dec(r);
  33. if l<=r then
  34. begin
  35. tem:=a[l];
  36. a[l]:=a[r];
  37. a[r]:=tem;
  38. inc(l);
  39. dec(r);
  40. end;
  41. end;
  42. until l>r;
  43. if t<r then qs(t,r);
  44. if l<w then qs(l,w);
  45. end;
  46. procedure bfs;
  47. var now,nowe,l,r:longint;
  48. begin
  49. fillchar(max,sizeof(max),);
  50. fillchar(p,sizeof(p),true);
  51. l:=; r:=; f[]:=; max[]:=maxn;
  52. while l<=r do
  53. begin
  54. now:=f[l];
  55. nowe:=head[now];
  56. while nowe<> do
  57. begin
  58. if min(max[now],b[nowe].w)>max[b[nowe].t] then
  59. begin
  60. max[b[nowe].t]:=min(max[now],b[nowe].w);
  61. if p[b[nowe].t] then
  62. begin
  63. p[b[nowe].t]:=false;
  64. inc(r);
  65. f[r]:=b[nowe].t;
  66. end;
  67. end;
  68. nowe:=b[nowe].f;
  69. end;
  70. inc(l);
  71. p[now]:=true;
  72. end;
  73. end;
  74. begin
  75. readln(n,m,k);
  76. for i:= to k do
  77. readln(a[i]);
  78. for i:= to m do
  79. begin
  80. readln(u,v,x);
  81. insert(*i-,u,v,x);
  82. insert(*i,v,u,x);
  83. end;
  84. bfs;
  85. qs(,k);
  86. now:=;
  87. while (max[a[now]]=) and (now<=k) do inc(now); //q[1]:=now;
  88. if now<>k+ then ans:=
  89. else begin
  90. writeln();
  91. halt;
  92. end;
  93. for i:=now+ to k do
  94. if max[a[i]]>ans then inc(ans);
  95. writeln(ans);
  96. end.

(转载请注明出处:http://www.cnblogs.com/Kalenda/)

P3380: [Usaco2004 Open]Cave Cows 1 洞穴里的牛之一的更多相关文章

  1. 3381: [Usaco2004 Open]Cave Cows 2 洞穴里的牛之二

    3381: [Usaco2004 Open]Cave Cows 2 洞穴里的牛之二 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 21  Solved ...

  2. Bzoj 3380: [Usaco2004 Open]Cave Cows 1 洞穴里的牛之一

    3380: [Usaco2004 Open]Cave Cows 1 洞穴里的牛之一 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 64  Solved ...

  3. bzoj3383[Usaco2004 Open]Cave Cows 4 洞穴里的牛之四*

    bzoj3383[Usaco2004 Open]Cave Cows 4 洞穴里的牛之四 题意: 平面直角坐标系有n个点,从(0,0)出发,从一个点上可以跳到所有与它横纵坐标距离都≤2的点上,求最少步数 ...

  4. bzoj3381[Usaco2004 Open]Cave Cows 2 洞穴里的牛之二*

    bzoj3381[Usaco2004 Open]Cave Cows 2 洞穴里的牛之二 题意: RMQ问题.序列长度≤25000,问题数≤25000. 题解: 倍增. 代码: #include < ...

  5. [BZOJ3380] [USACO2004 Open]Cave Cows 1 洞穴里的牛之一

    Description ​ 很少人知道其实奶牛非常喜欢到洞穴里面去探险. ​ 洞窟里有N(1≤N≤100)个洞室,由M(1≤M≤1000)条双向通道连接着它们.每对洞室间 至多只有一条双向通道.有K( ...

  6. bzoj3380: [Usaco2004 Open]Cave Cows 1 洞穴里的牛之一(spfa+状压DP)

    数据最多14个有宝藏的地方,所以可以想到用状压dp 可以先预处理出每个i到j的路径中最小权值的最大值dis[i][j] 本来想用Floyd写,无奈太弱调不出来..后来改用spfa 然后进行dp,这基本 ...

  7. P3383: [Usaco2004 Open]Cave Cows 4 洞穴里的牛之四

    这个系列总算是做完了,这是我第一次高效率做完四道题,虽然中间有两道水题,但是第一和第四题还是蛮好的,但是只要能想到思路就很快能打完的. 像这道题,刚开始在想能不能用DP?但是苦于不知道怎么实施,后来又 ...

  8. P3382: [Usaco2004 Open]Cave Cows 3 洞穴里的牛之三

    首先,我们先确定,最长的曼哈顿距离只可能为 x1+y2-(x2+y2) 和 x1-y1-(x2-y2) 所以我们只需要维护四个值, 分别代表 max(x+y) ; max(x-y) ; min(x+y ...

  9. P3381: [Usaco2004 Open]Cave Cows 2 洞穴里的牛之二

    这题..思维上远没有上一题复杂,是一个裸的RMQ..利用倍增就可以解决了. var n,q,i,j,f,t,c:longint; a:array[..,..] of longint; function ...

随机推荐

  1. CentOS下通过rdesktop连接Windows远程桌面

    众所周知,微软的Windows提供了一种远程桌面系统(Remote Desktop),该服务的默认端口是3389,可使用户远程登录进行系统管理或作为终端服务器运行各种应用软件. 而要连接Windows ...

  2. 移植DNS服务bind

    移植DNS服务bind 标签: makefile工作linuxbuildgcc工具 先写用于DNS的bind. 一. 移植环境 1 .硬件环境: Host : X86 PC Target : MPC8 ...

  3. sqlca.sqlcode

    http://www.cppblog.com/prayer/archive/2009/06/03/86679.html        ======DB2 http://my.oschina.net/s ...

  4. Zend Studio GitHub 使用教程

    这是我在开发项目时遇到的一些问题总结,目前基本实现协同开发.还有个问题是怎么才能像sf那样添加管理帐号,使用多个帐号协同开发,求教,欢迎留言讨论. 一.安装eGit插件 1. 由于zend studi ...

  5. POJ C++程序设计 编程题#3 编程作业—文件操作与模板

    编程题#3: 整数的输出格式 来源: POJ(Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 1000ms 内存限制: 1000kB 描述 利 ...

  6. Windows Server 2003搭建FTP服务器 实现盘符之间切换

     Serv-U中设置虚拟目录的方法 如果在E盘下有一个名为LoveHina的目录,在F盘下也有一个名为LoveHina的目录.那么,如何让使用同一个账号的用户可以同时访问这两个目录呢? 我们可以使用S ...

  7. 破解金盘gdlisxp系统

    1.现在要破解的金盘gdlisxp系统版本 2.首先在你电脑上要有脱壳工具AspackDie,和OllyDBG动态调试工具,电脑上装好金盘软件. 3.用AspackDie进行对金盘应用程序脱壳处理,生 ...

  8. 利用脚本设置本机IP地址

    各位同学,在日常工作中.常出现需要指定IP的地址的清况.为了解决这一个问题,我特意为自己编写了一段脚本.方便设定自己笔记本的IP地址.供大家参考. 其中包括无线wifi和有线网络设定两个IP的操作. ...

  9. 神奇的fastcgi_finish_request

    当PHP运行在FastCGI模式时,PHP FPM提供了一个名为fastcgi_finish_request的方法.按照文档上的说法,此方法可以提高请求的处理速度,如果有些处理可以在页面生成完后再进行 ...

  10. java实现的MySQL自动备份和还原(struts2+Hibernate)---兼容 window+Linux

    相信很多朋友都经历过数据库出问题的情况,我也同样(见我的上一篇博文:phpmyadmin误删表后的恢复过程(心惊胆跳啊)   ).如果数据很大或者很重要,那么恢复起来是相当困难的,所以我们在做一个相对 ...