WILL 吃桃

(peach.pas/c/cpp)

【 题目描述】

Will 很喜欢吃桃, 某天 Will 来到了一片森林, 森林中有 N 颗桃树, 依次编号为 1,2,„,N.每棵树上有数量不等的桃子。 某些桃树之间有单向通行的小路, 且路径不会形成环, 通过每条小路的时间也不一定相同。 现在, Will 提着一个最多可以容纳 K 个桃子的篮子, 从编号为1 的桃树出发, 走过若干条小路之后来到编号为 N 的桃树。 当 Will 在路上走的时候, 每走 1分钟, 他会从篮子中拿出一个桃子来吃掉( 如果篮子中还有桃子的话, 如果篮子中没有桃子的话那就没得吃了!)。 每到一棵桃树( 包括起点和终点), 他会把这棵桃树上的所有桃子摘下来放入篮子中。 现在你的问题是: 求 K 的最小值, 使得 Will 能够不浪费任何桃子( 每到一棵桃树, 这棵树上的所有桃子都必须被装入篮子中)。

【 输入格式】

输入文件第一行两个整数, N,m, 分别表示桃树的数量以及连接桃树的小路的数量。

接下来一行 N 个用空格隔开的整数, 分别表示每一颗桃树上的桃子的数量。

接下来 m 行, 每行 3 个用空格隔开的整数, a,b,c, 表示有一条小路能够从桃树 a 走到桃树 b,( 注意小路一定是单向的), 走过这条小路所需要的时间是 c 分钟。从任意一棵桃树出发, Will 不可能沿着小路走若干条路之后重新回到这棵桃树。( 给出的图是一个有向无环图。) 数据保证 Will 一定能够从桃树 1 走到桃树 N。

【 输出格式】

输出文件有且仅有一行, 一个整数, 表示 K 的最小值

【 输入样例】

3 3

5 1 6

1 3 1

1 2 4

2 3 5

【 输出样例】

6

【 数据规模】

对于 30%的数据: 3≤N≤10; m≤20;

对于 60%的数据: 3≤N≤1,000; m≤10,000;

对于 100%的数据: 3≤N≤10,000; 3≤m≤30,000; 所有其他数据都不超过 10000;

乍一看,数据很大,所以在这儿我们可以二分答案,SPFA判断是否可行。

code

#include <cstdio>
#include <vector>
#include <cstring>
#define mm 120000
using namespace std;
int n,m,l[],h,t,vis[],p[],ans=2e9,f[];
vector <pair<int,int> >a[];
inline int min(int x,int y){return x<y?x:y;}
inline int max(int x,int y){return x>y?x:y;}
int SPFA(int wks){
memset(vis,,sizeof(vis));
memset(f,,sizeof(f));
h=t=;
l[++t]=,f[]=p[];
vis[]=;
while(h<t){
h+=;
int front=l[h];vis[front]=;
for(int i=;i<a[front].size();i++){
int to=a[front][i].first;
if(p[to]+max(,f[front]-a[front][i].second)<f[to]&&p[to]+max(,f[front]-a[front][i].second)<=wks){
f[to]=p[to]+max(,f[front]-a[front][i].second);
if(!vis[to])vis[to]=,l[t=t+]=to;
}
}
}
return f[n]<=wks;
}
int main(){
freopen("peach.in","r",stdin);
freopen("peach.out","w",stdout);
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)scanf("%d",&p[i]);
for(int i=;i<=m;i++){
int x,y,c;scanf("%d%d%d",&x,&y,&c);
a[x].push_back(make_pair(y,c));
}
int l=p[],r=;
while(l<r){
int mid=(l+r)>>;
if(!SPFA(mid))l=mid+;
else r=mid;
}
printf("%d",l);
fclose(stdin),fclose(stdout);
return ;
}

WILL吃桃_KEY的更多相关文章

  1. C#之猴子吃桃儿问题的解法——猴子吐桃儿

    猴子第一天摘了许多个桃子,先吃了所有桃子的一半,后又吃了一个:第二天又吃了剩下桃子的一半,后又吃了一个……第十天,剩1个桃子.问:猴子第一天摘了多少个桃子? 首先对“猴子吃桃”的过程进行正向推导,设: ...

  2. 猴子吃桃问题(南阳ACM324)

    猴子吃桃问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:0 描述 有一堆桃子不知数目,猴子第一天吃掉一半,又多吃了一个,第二天照此方法,吃掉剩下桃子的一半又多一个,天天如此, ...

  3. 猴子吃桃问题(Java递归实现)

    猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个,第二天早上又将剩下的桃子吃掉一半,又多吃了一个.以后每天早上都吃了前一天剩下的一半零一个.到第10天早上想再吃时,见只剩下 ...

  4. ocrosoft 程序设计提高期末复习问题M 递归求猴子吃桃

    http://acm.ocrosoft.com/problem.php?cid=1172&pid=12 题目描述 猴子吃桃问题.猴子第1天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个. ...

  5. C语言中猴子吃桃问题

    猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个.第二天早上又将第一天剩下的桃子吃掉一半,有多吃了一个.以后每天早上都吃了前一天剩下的一半零一个.到第 10 天早上想再吃时 ...

  6. Java50道经典习题-程序17 猴子吃桃问题

    题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个 第二天早上又将剩下的桃子吃掉一半,又多吃了一个.以后每天早上都吃了前一天剩下的一半零一个.到第10天早上想再吃时,见只 ...

  7. java语言描述 猴子吃桃问题(递归和循环写法)

    //题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个//第二天早上又将剩下的桃子吃掉一半,又多吃了一个//以后每天早上都吃了前一天剩下 的一半零一个.到第10天早上想再 ...

  8. 用Java编程计算猴子吃桃问题

    猴子吃桃问题:猴子吃桃子问题:猴子第一天摘下N个桃子,当时就吃了一半,还不过瘾,就又吃了一个.第二天又将剩下的桃子吃掉一半,又多吃了一个.以后每天都吃前一天剩下的一半零一个.到第10天在想吃的时候就剩 ...

  9. nyoj 324-猴子吃桃问题 (m[i] = (m[i-1] + 1) * 2)

    324-猴子吃桃问题 内存限制:64MB 时间限制:3000ms 特判: No 通过数:20 提交数:21 难度:0 题目描述: 有一堆桃子不知数目,猴子第一天吃掉一半,又多吃了一个,第二天照此方法, ...

随机推荐

  1. 关于read的例子和条件测试

    1.关于read比较两个的大小 #!/bin/sh read -t -p "please input two num:" a b if [ $a -gt $b ]; then ec ...

  2. 监听 window.open 打开的窗口关闭并回调

    第三方的登录的解决方案通常有两种方式,一是打开一个新的标签页,然后登录回调回来: 二是通过父窗口打开一个子窗体去第三方登录,登陆成功时关掉子窗体回到父窗口. 问题来了 我的父窗体怎么样才知道子窗体被关 ...

  3. WebDriver中自动识别验证码--Python实现

    一.在自动化测试中,遇到验证码的处理方法有以下两种: 1.找开发去掉验证码或者使用万能验证码 2.使用OCR自动识别 这里,方法一只要和研发沟通就行. 使用pytesseract自动化识别,一般识别率 ...

  4. C# 使用NPOI 实现Excel的简单导入导出

    private void btnImport_Click(object sender, EventArgs e) { DataSet ds = new DataSet(); DataTable dt ...

  5. jmeter系列-------注意事项

    1.自己创建的数据自己擅长,不要留垃圾数据 2.每个接口都需要增加断言,保证脚本的结果的正确性 3.相同的应用放在一个简单控制器下,所有的应用尽量放在一个线程组下面,将特殊场景单独抽离成一个线程组 4 ...

  6. 使用Jmeter进行http接口测试 ---------成都杀手

    前言: 本文主要针对http接口进行测试,使用Jmeter工具实现. Jmter工具设计之初是用于做性能测试的,它在实现对各种接口的调用方面已经做的比较成熟,因此,本次直接使用Jmeter工具来完成对 ...

  7. Linux平台 Oracle 12cR2 RAC安装Part2:GI配置

    Linux平台 Oracle 12cR2 RAC安装Part2:GI配置 三.GI(Grid Infrastructure)安装 3.1 解压GI的安装包 3.2 安装配置Xmanager软件 3.3 ...

  8. 生命游戏 Java

    本程序由四个类组成:其中Init_data,用于初始化各个活细胞的状态judge_state,用于判断下一代的细胞状态,并进行更新.set_color,用于给GUI界面中各个细胞涂色set_frame ...

  9. 优先队列的二叉堆Java实现

    package practice; import edu.princeton.cs.algs4.StdRandom; public class TestMain { public static voi ...

  10. Java基础学习 —— 对象的克隆

    对象的克隆分为对象的浅克隆和深克隆 一.对象的浅克隆 注意事项: 1.如果一个对象需要调用clone的方法克隆,那么该对象必须要实现Cloneable接口 2.Cloneable对象只是一个标识对象, ...