题面

During the kindergarten days, flymouse was the monitor of his class. Occasionally the head-teacher brought the kids of flymouse’s class a large bag of candies and had flymouse distribute them. All the kids loved candies very much and often compared the numbers of candies they got with others. A kid A could had the idea that though it might be the case that another kid B was better than him in some aspect and therefore had a reason for deserving more candies than he did, he should never get a certain number of candies fewer than B did no matter how many candies he actually got, otherwise he would feel dissatisfied and go to the head-teacher to complain about flymouse’s biased distribution.

飞鼠的幼儿园班上经常发糖果,全班Infinite个糖果由飞鼠分配给包括飞鼠(和史努比)在内的n个孩子。表现乖的人得到的糖果多很正常,但其中可能 有小孩A 觉得 无论自己的糖果多么少,另一个小孩B都不能得到 比自己多 超过c个的糖果。飞鼠不敢让同学们不满意,因为他们会告诉老师。

snoopy shared class with flymouse at that time. flymouse always compared the number of his candies with that of snoopy’s. He wanted to make the difference between the numbers as large as possible while keeping every kid satisfied. Now he had just got another bag of candies from the head-teacher, what was the largest difference he could make out of it?

史努比和飞鼠在同一个班上,飞鼠经常跟他攀比。飞鼠希望在自己不被告发的前提下,使自己得到比史努比尽量多的糖果,并央求你告诉他“飞鼠的糖果 - 史努比的糖果”数目的最大值。

Input

The input contains a single test cases. The test cases starts with a line with two integers N and M not exceeding 30 000 and 150 000 respectively. N is the number of kids in the class and the kids were numbered 1 through N. snoopy and flymouse were always numbered 1 and N. Then follow M lines each holding three integers AB and c in order, meaning that kid A believed that kid B should never get over c candies more than he did.

多组数据,输入到文件末尾

每组数据开头n和m,(m表示对糖果数的m对要求,飞鼠标号为n,史努比标号为1)

下面m行每行A、B、C,表示糖果数要满足“B的糖果数 ≤ A的糖果数 + C”

Output

Output one line with only the largest difference desired. The difference is guaranteed to be finite.

每组数据一行答案,保证有解。所有数都在int范围内。

题解

分析一下这道题的条件,设c[i]表示 i 的糖果数,发现“c[B] <= c[A] + C” 相似于 “dis[B] <= dis[A] + weight”,后者是一张图中每个点到原点最短路满足的条件,而且,每个点的最短路都是满足上述条件的最大值。于是,把A向B连一条边权为C的边,再从1到n跑一遍最短路就完了。(建议别用SPFA)

CODE(dij)

#include<cstdio>
#include<vector>
#include<cstring>
#include<iostream>
#define MAXN 30005
#define MAXM 150005
#define LL long long
#define ENDL putchar('\n')
using namespace std;
LL read() {
LL f = 1,x = 0;char s = getchar();
while(s < '0' || s > '9') {if(s == '-')f = -f;s = getchar();}
while(s >= '0' && s <= '9') {x = x*10+(s-'0');s = getchar();}
return f*x;
}
int n,m,i,j,s,o,k;
struct it{
int v,w;
it(){v = w = 0;}
it(int V,int W){v = V;w = W;}
};
vector<it> g[MAXN];
LL dp[MAXN];
int bing(int a,int b) {return dp[a] < dp[b] ? a:b;}
int tre[MAXN<<2],M;
void maketree(int n) {M = 1;while(M < n+2)M <<= 1;}
void addtree(int x,int y) {
int s = M + x;tre[s] = y;s >>= 1;
while(s) {tre[s] = bing(tre[s<<1],tre[s<<1|1]);s >>= 1;}
}
int findall() {return tre[1];}
int main() {
while(scanf("%d%d",&n,&m) == 2) {
for(int i = 1;i <= m;i ++) {
s = read();o = read();k = read();
g[s].push_back(it(o,k));
}
memset(tre,0,sizeof(tre));
maketree(n);
for(int i = 0;i <= n;i ++) dp[i] = 1e18;
dp[1] = 0;
addtree(1,1);
for(int i = 1;i <= n;i ++) {
int t = findall();
if(t == 0) break;
for(int j = 0;j < g[t].size();j ++) {
if(dp[g[t][j].v] > dp[t] + g[t][j].w) {
dp[g[t][j].v] = dp[t] + g[t][j].w;
addtree(g[t][j].v,g[t][j].v);
}
}
addtree(t,0);
}
printf("%lld\n",dp[n]);
}
return 0;
}

OpenJ_Bailian - 3424 Candies (差分约束)的更多相关文章

  1. poj3159 Candies(差分约束,dij+heap)

    poj3159 Candies 这题实质为裸的差分约束. 先看最短路模型:若d[v] >= d[u] + w, 则连边u->v,之后就变成了d[v] <= d[u] + w , 即d ...

  2. POJ-3159.Candies.(差分约束 + Spfa)

    Candies Time Limit: 1500MS   Memory Limit: 131072K Total Submissions: 40407   Accepted: 11367 Descri ...

  3. POJ 3159 Candies 差分约束dij

    分析:设每个人的糖果数量是a[i] 最终就是求a[n]-a[1]的最大值 然后给出m个关系 u,v,c 表示a[u]+c>=a[v] 就是a[v]-a[u]<=c 所以对于这种情况,按照u ...

  4. [poj 3159]Candies[差分约束详解][朴素的考虑法]

    题意 编号为 1..N 的人, 每人有一个数; 需要满足 dj - di <= c 求1号的数与N号的数的最大差值.(略坑: 1 一定要比 N 大的...difference...不是" ...

  5. [poj3159]Candies(差分约束+链式前向星dijkstra模板)

    题意:n个人,m个信息,每行的信息是3个数字,A,B,C,表示B比A多出来的糖果不超过C个,问你,n号人最多比1号人多几个糖果 解题关键:差分约束系统转化为最短路,B-A>=C,建有向边即可,与 ...

  6. poj 3159 Candies 差分约束

    Candies Time Limit: 1500MS   Memory Limit: 131072K Total Submissions: 22177   Accepted: 5936 Descrip ...

  7. poj3159 Candies(差分约束)

    转载请注明出处: http://www.cnblogs.com/fraud/          ——by fraud Candies Time Limit: 1500MS   Memory Limit ...

  8. POJ3159 Candies —— 差分约束 spfa

    题目链接:http://poj.org/problem?id=3159 Candies Time Limit: 1500MS   Memory Limit: 131072K Total Submiss ...

  9. Candies(差分约束)

    http://poj.org/problem?id=3159 题意: flymouse是幼稚园班上的班长,一天老师给小朋友们买了一堆的糖果,由flymouse来分发,在班上,flymouse和snoo ...

随机推荐

  1. 解决Docker运行命令时提示"Got permission denied while trying to connect to the Docker daemon socket"类情况

    Docker安装命令: 解决Docker运行命令时提示"Got permission denied while trying to connect to the Docker daemon ...

  2. 纯css就能实现可点击切换的轮播图,feel起来很丝滑

    前言 轮播图经常会在项目里用到,但是实际上用到的轮播图都是比较简单的,没有复杂的特效,这个时候如果去引入swiper那些库的话,未免就有点杀鸡焉用牛刀了. 所以不如自己手写一个,而今天我要分享的一种写 ...

  3. Ribbon的ServerStats引起内存泄露问题总结

    问题描述 服务运行一段时间之后,出现页面卡顿加载慢的问题,使用top命令查看了服务器的使用情况,发现CPU飙高,接着查看了该进程中每个线程的占用情况,发现导致CPU高的线程是JVM垃圾回收的线程,然后 ...

  4. 领导:谁再用redis过期监听实现关闭订单,立马滚蛋!

    日前拜读阿牛老师的大作 领导:谁再用定时任务实现关闭订单,立马滚蛋! 发现其方案有若干瑕疵,特此抛砖引玉讨论一二. 在电商.支付等领域,往往会有这样的场景,用户下单后放弃支付了,那这笔订单会在指定的时 ...

  5. jetbrains 系列产品无限试用

    无限试用插件 在线安装 需要添加第三方插件仓库地址 设置 -- Manage Plugins Reposition... -- + https://plugins.zhile.io plugins 中 ...

  6. 关于个人全栈项目【臻美IT】博客类出现的问题以及解决方法

    每做一个项目,要记得写下心得哦,别偷懒啊!先上网址:https://www.maomin.club/ 这个项目属于博客类的,因为百度审核的问题就大体做了下,就当来练练手,里面文章链接的是CSDN的博客 ...

  7. SimpleMarkDown编辑器离线版以及桌面应用版上线

    之前,我们开发了Web版本SimpleMarkDown编辑器.今天,我们又推出了离线版和桌面应用版. 主要功能: 页面简约: 实时保存: 一键清空内容: 支持微信公众号.知乎.稀土掘金.CSDN等多个 ...

  8. 2022giao考游记

    Day -12: 今年高考准备去考着玩玩,考前心态十分稳健.~~毕竟我才高一/cy~~ 这次高考我倒是没啥目标,主要是来试试水,感受一下高考的氛围,体会一下自己和高三应届生们的水平的差距.也算是丰富自 ...

  9. Mysql事物锁等待超时(Lock wait timeout exceeded; try restarting transaction)

    一.问题描述 在做查询语句时,MySQL 抛出了这样的异常:锁等待超时 Lock wait timeout exceeded; try restarting transaction,是当前事务在等待其 ...

  10. 校验日期格式为yyyy-MM-dd

    /** * 校验时间 * * @param text * @return */ public static boolean checkTime(String text) { DateFormat fo ...