传送门

这道题的题意描述简直有毒。题没看完一眼分层图,然后火速敲了个堆优化的dijkstra,然后就被样例教做人了QAQ

这里说的最坏的情况让我很迷茫?感觉很难判定到底什么是最坏的情况以及确定了最坏的情况应该怎么办....然后我就去扒了扒别人好几年前的代码,耐着性子把pascal的代码看完..恍然大悟..

题目那样描述确实有点不妥当,但是如果说清楚了,那这就成一个完全的裸题了。

要求在最坏的情况下收益最大,假设你现在在一个点上,你已经失误了$i$次,那么还允许你失误$K-i$次,要求最大收益。这里之所以不能采取分层图也是这个原因,到了不同的状态,图的构建方案是不同的。

所以在具体实现时,对于每个状态,需要得到

1.如果不失误,那么到目标状态的最大收益。

2.如果失误,到目标状态的最小收益。

然后对这两个值取$min$,因为题目要求的状况是worst。

  1. //oj 1601
  2. //by Cydiater
  3. //2016.10.6
  4. #include <iostream>
  5. #include <cstring>
  6. #include <string>
  7. #include <algorithm>
  8. #include <queue>
  9. #include <map>
  10. #include <ctime>
  11. #include <cmath>
  12. #include <cstdlib>
  13. #include <cstdio>
  14. #include <iomanip>
  15. using namespace std;
  16. #define ll long long
  17. #define up(i,j,n) for(int i=j;i<=n;i++)
  18. #define down(i,j,n) for(int i=j;i>=n;i--)
  19. const ll MAXN=2e5+5;
  20. const ll oo=1000000000000LL;
  21. inline ll read(){
  22. char ch=getchar();ll x=0,f=1;
  23. while(ch>'9'||ch<'0'){if(ch=='-')f=-1;ch=getchar();}
  24. while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
  25. return x*f;
  26. }
  27. ll N,M,K,LINK[MAXN],len=0,f[MAXN][15];
  28. struct edge{
  29. ll y,next,v;
  30. }e[MAXN];
  31. bool vis[MAXN];
  32. namespace solution{
  33. inline void insert(int x,int y,int v){e[++len].next=LINK[x];LINK[x]=len;e[len].y=y;e[len].v=v;}
  34. void init(){
  35. N=read();M=read();K=read();
  36. up(i,1,M){
  37. ll x=read(),y=read(),v=read();
  38. insert(x,y,v);
  39. }
  40. }
  41. void dfs(int node,int fa){
  42. if(vis[node])return;
  43. for(int i=LINK[node];i;i=e[i].next)if(e[i].y!=fa)dfs(e[i].y,node);
  44. up(j,0,K){
  45. for(int i=LINK[node];i;i=e[i].next)if(e[i].y!=fa)
  46. f[node][j]=max(f[node][j],f[e[i].y][j]+e[i].v);
  47. if(j<K)for(int i=LINK[node];i;i=e[i].next)if(e[i].y!=fa)
  48. f[node][j]=min(f[node][j],f[e[i].y][j+1]+e[i].v);
  49. f[node][j]=max(f[node][j],0LL);
  50. }
  51. vis[node]=1;
  52. }
  53. void slove(){
  54. up(i,1,N)up(j,0,K)f[i][j]=-oo;
  55. memset(vis,0,sizeof(vis));
  56. dfs(1,0);
  57. }
  58. void output(){
  59. cout<<f[1][0]<<endl;
  60. }
  61. }
  62. int main(){
  63. //freopen("input.in","r",stdin);
  64. using namespace solution;
  65. init();
  66. slove();
  67. output();
  68. return 0;
  69. }

[USACO 2010 OPEN]SLIED的更多相关文章

  1. NC24724 [USACO 2010 Feb S]Chocolate Eating

    NC24724 [USACO 2010 Feb S]Chocolate Eating 题目 题目描述 Bessie has received \(N (1 <= N <= 50,000)\ ...

  2. usaco 2010年3月银组题解

    usaco银组解题报告 一.石子游戏如果把‘O’当作0,‘X’当做1,则N个洞的每一种状态都可以看做是一个N位二进制数.于是,这个问题就变成了求环绕的N位格雷码.幸运的是,这个结构很容易就能够用一个简 ...

  3. Usaco 2010 Dec Gold Exercise(奶牛健美操)

    /*codevs 3279 二分+dfs贪心检验 堆版本 re一个 爆栈了*/ #include<cstdio> #include<queue> #include<cst ...

  4. BZOJ1782[USACO 2010 Feb Gold 3.Slowing down]——dfs+treap

    题目描述 每天Farmer John的N头奶牛(1 <= N <= 100000,编号1…N)从粮仓走向他的自己的牧场.牧场构成了一棵树,粮仓在1号牧场.恰好有N-1条道路直接连接着牧场, ...

  5. BZOJ1828[USACO 2010 Mar Gold 2.Barn Allocation]——贪心+线段树

    题目描述 输入 第1行:两个用空格隔开的整数:N和M * 第2行到N+1行:第i+1行表示一个整数C_i * 第N+2到N+M+1行: 第i+N+1行表示2个整数 A_i和B_i 输出 * 第一行: ...

  6. BZOJ1916[USACO 2010 Open Gold 2.Water Slides]——DP+记忆化搜索

    题目描述 受到秘鲁的马丘比丘的新式水上乐园的启发,Farmer John决定也为奶牛们建 一个水上乐园.当然,它最大的亮点就是新奇巨大的水上冲浪.超级轨道包含 E (1 <= E <=15 ...

  7. BZOJ1827[USACO 2010 Mar Gold 1.Great Cow Gathering]——树形DP

    题目描述 Bessie正在计划一年一度的奶牛大集会,来自全国各地的奶牛将来参加这一次集会.当然,她会选择最方便的地点来举办这次集会.每个奶牛居住在 N(1<=N<=100,000) 个农场 ...

  8. [USACO 2010 Open Silver 3.Time Travel]——链表

    Description 约翰得到了一台时光机,他可以用这台机器回到过去(但不能到未来),改变他家的牛群.约翰 打算依次进行 N 步操作,每步操作分为三种: • 买入操作以 a 表示,后接一个参数 i, ...

  9. BZOJ1785[USACO 2010 Jan Gold 3.Cow Telephones]——贪心

    题目描述 奶牛们建立了电话网络,这个网络可看作为是一棵无根树连接n(1 n 100,000)个节点,节点编号为1 .. n.每个节点可能是(电话交换机,或者电话机).每条电话线连接两个节点.第i条电话 ...

随机推荐

  1. jQuery 插件编程精讲与技巧

    适应的读者: 1.有一定的jquery编程基础但是想在技能上有所提升的人 2.前端开发的程序员 3.对编程感兴趣的学生 为什么要学习jquery插件的编写? 为什么要学习jquery插件的编写?相信这 ...

  2. 将Table表格导出到Excel

    1.导出当前页 效果如下: 前台代码: @{ Layout = null; } <!DOCTYPE html> <html> <head> <meta nam ...

  3. mysql忘记密码怎么办?

    mysql有时候忘记密码了怎么办?我给出案例和说明!一下就解决了! Windows下的实际操作如下 1.关闭正在运行的MySQL. 2.打开DOS窗口,转到mysql\bin目录. 3.输入mysql ...

  4. CSS 栅格布局

    bootstrap3.0教程之栅格系统原理(布局) http://www.jb51.net/css/152846.html [div+css]栅格化布局样式备用坑 http://www.0773lin ...

  5. 使用HTML5新特性Mutation Observer实现编辑器的撤销和撤销回退操作

     MutationObserver介绍 MutationObserver给开发者们提供了一种能在某个范围内的DOM树发生变化时作出适当反应的能力.该API设计用来替换掉在DOM3事件规范中引入的Mut ...

  6. eclipse-插件安装的三种方式

    (前两种安装方式以多国语言包的安装为例) 1.  普通安装:用直接解压的安装方式来实现 解压插件到某个文件夹 将下载的插件文件解压到 Eclipse 的安装目录下 如插件文件为多国语言包: NLpac ...

  7. Jquery-获取iframe中的dom对象

    父窗口中操作iframe: $(window.frames["iframeChild"].document) //假如iframe的id为iframeChild 在子窗口中操作父窗 ...

  8. 绘图: Shape, Path

    Shape - 图形 Path - 路径 示例1.演示“Shape”相关知识点Drawing/Shape.xaml <Page x:Class="Windows10.Drawing.S ...

  9. C++编译期多态与运行期多态

    前言 今日的C++不再是个单纯的"带类的C"语言,它已经发展成为一个多种次语言所组成的语言集合,其中泛型编程与基于它的STL是C++发展中最为出彩的那部分.在面向对象C++编程中, ...

  10. js-JavaScript高级程序设计学习笔记6

    第八章 BOM 1.BOM的核心对象是window,他表示浏览器的一个实例.在浏览器中,window对象有双重角色,它既是通过JS访问浏览器窗口的一个接口,又是ES规定的Global对象. 2.定义全 ...