poj3159 Candies(差分约束,dij+heap)
这题实质为裸的差分约束。
先看最短路模型:若d[v] >= d[u] + w, 则连边u->v,之后就变成了d[v] <= d[u] + w , 即d[v] – d[u] <= w。
再看题目给出的关系:b比a多的糖果数目不超过c个,即d[b] – d[a] <= c ,正好与上面模型一样,
所以连边a->b,最后用dij+heap求最短路就行啦。
ps:我用vector一直TLE,后来改用链式前向星才过了orz。。。
- #include<cstdio>
- #include<cstring>
- #include<algorithm>
- #include<queue>
- #include<vector>
- #include<set>
- #define CLR(a,b) memset((a),(b),sizeof((a)))
- using namespace std;
- const int N = ;
- const int M = ;
- const int inf = 0x3f3f3f3f;
- int n, m;
- bool s[N];
- int head[N];
- int cnt;
- struct edge{
- int nex;
- int v, w;
- }g[M];
- struct node{
- int v, w;
- node(int _v=,int _w=):v(_v),w(_w){}
- bool operator < (const node&r)const{
- return r.w < w;
- }
- };
- void add_edge(int u,int v,int w){
- g[cnt].v = v;
- g[cnt].w = w;
- g[cnt].nex = head[u];
- head[u] = cnt++;
- }
- void dij(){
- int i, u, v, w;
- node t;
- CLR(s, );
- priority_queue<node>q;
- q.push(node(,));
- while(!q.empty()){
- t = q.top(); q.pop();
- u = t.v;
- if(s[u]) continue;
- s[u] = ;
- if(u == n) break;
- for(i = head[u]; ~i; i = g[i].nex){
- v = g[i].v;
- if(!s[v]){
- w = t.w + g[i].w;
- q.push(node(v, w));
- }
- }
- }
- printf("%d\n", t.w);
- }
- int main(){
- int i, j, a, b, c;
- scanf("%d %d", &n, &m);
- cnt = ;
- CLR(head, -);
- for(i = ; i <= m; ++i){
- scanf("%d %d %d", &a, &b, &c);
- add_edge(a,b,c);
- }
- dij();
- return ;
- }
poj3159 Candies(差分约束,dij+heap)的更多相关文章
- 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 ...
- POJ-3159.Candies.(差分约束 + Spfa)
Candies Time Limit: 1500MS Memory Limit: 131072K Total Submissions: 40407 Accepted: 11367 Descri ...
- [poj3159]Candies(差分约束+链式前向星dijkstra模板)
题意:n个人,m个信息,每行的信息是3个数字,A,B,C,表示B比A多出来的糖果不超过C个,问你,n号人最多比1号人多几个糖果 解题关键:差分约束系统转化为最短路,B-A>=C,建有向边即可,与 ...
- poj3159 Candies(差分约束)
转载请注明出处: http://www.cnblogs.com/fraud/ ——by fraud Candies Time Limit: 1500MS Memory Limit ...
- POJ3159 Candies —— 差分约束 spfa
题目链接:http://poj.org/problem?id=3159 Candies Time Limit: 1500MS Memory Limit: 131072K Total Submiss ...
- POJ-3159(差分约束+Dijikstra算法+Vector优化+向前星优化+java快速输入输出)
Candies POJ-3159 这里是图论的一个应用,也就是差分约束.通过差分约束变换出一个图,再使用Dijikstra算法的链表优化形式而不是vector形式(否则超时). #include< ...
- [poj 3159]Candies[差分约束详解][朴素的考虑法]
题意 编号为 1..N 的人, 每人有一个数; 需要满足 dj - di <= c 求1号的数与N号的数的最大差值.(略坑: 1 一定要比 N 大的...difference...不是" ...
- poj 3159 Candies 差分约束
Candies Time Limit: 1500MS Memory Limit: 131072K Total Submissions: 22177 Accepted: 5936 Descrip ...
- Candies(差分约束)
http://poj.org/problem?id=3159 题意: flymouse是幼稚园班上的班长,一天老师给小朋友们买了一堆的糖果,由flymouse来分发,在班上,flymouse和snoo ...
随机推荐
- Shell概述
一,Shell原理
- 【VB6笔记-01】 读取Excel绑定到DataGrid
Private Sub cmdOpen_Click() CommonDialog1.Filter = "Excel???t(*.xlsx)|*.xlsx" CommonDialog ...
- Apache-Shiro+Zookeeper系统集群安全解决方案之缓存管理
上篇[Apache-Shiro+Zookeeper系统集群安全解决方案之会话管理],解决了Shiro在系统集群开发时安全的会话共享问题,系统在使用过程中会有大量的权限检查和用户身份检验动作,为了不频繁 ...
- adb shell input keyevent code详解
adb shell input keyevent 7 # for key '0' adb shell input keyevent 8 # for key '1' adb shell input ke ...
- 未能加载文件或程序集“SQLDAL”或它的某一个依赖项。系统找不到指定的文件
1. 检查是否SQLDAL.DLL这个程序集文件是否存在,是否在Debug目录下(如果你是在Debug模式下调试).或者看看是否是配置文件中的名称和实际的dll的名称不对应. 2. 你使用的是Asse ...
- grep 简单使用
grep "关键字" file文件名 | tail -100|grep "关键字" --col grep的功能 grep从一个或多个文本文件中查 ...
- 利用PinYin4j 实现List中的对象按数字,字母, 汉字排序
要排序的对象: import net.sourceforge.pinyin4j.PinyinHelper; import net.sourceforge.pinyin4j.format.HanyuPi ...
- iOS - Swift Struct 结构体
1.Struct 的创建 1.1 基本定义 结构体的定义 // 定义结构体数据类型 struct BookInfo { // 每个属性变量都必须初始化 var ID:Int = 0 var Name: ...
- mysql概要(五)union
1.union,union all;合并不像表联合那样记录之间交叉组合而是插入新记录的效果 union:有个特性是会去重复,如果两个结果出现相同一条记录会被忽略掉一条. uniion all:将不会出 ...
- MyEclipse Servers视窗出现“Could not create the view: An unexpected exception was thrown”错误解决办法
打开所在的wordspace文件夹,在下面子文件夹 .metadata\.plugins\org.eclipse.core.runtime\.settings\com.genuitec.eclipse ...