3159 -- Candies

  明明找的是差分约束,然后就找到这题不知道为什么是求1~n的最短路的题了。然后自己无聊写了一个heap,518ms通过。

代码如下:

 #include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm> using namespace std; const int N = ;
const int M = ;
struct Edge {
int t, nx, c;
} edge[M];
int eh[N], ec; void init() {
memset(eh, -, sizeof(eh));
ec = ;
} void addedge(int s, int t, int c) {
edge[ec].t = t, edge[ec].nx = eh[s], edge[ec].c = c;
eh[s] = ec++;
} struct Heap {
int val[N], pos[N], id[N], sz, tmp, d;
void init() {
sz = ;
memset(pos, -, sizeof(pos));
}
int up(int t) {
while (t > && val[t] < val[t >> ]) pos[id[t] = id[t >> ]] = t, swap(val[t], val[t >> ]), t >>= ;
return t;
}
void push(int i, int v) {
val[++sz] = v;
pos[i] = up(sz);
id[pos[i]] = i;
}
void down(int tmp) {
while ((tmp << ) <= sz) {
if (val[tmp] <= val[tmp << ] && val[tmp] <= val[tmp << | ]) break;
if ((tmp << == sz) || val[tmp << ] <= val[tmp << | ]) {
d = tmp << ;
swap(pos[id[tmp]], pos[id[d]]);
swap(id[tmp], id[d]);
swap(val[tmp], val[d]);
tmp = d;
} else {
d = tmp << | ;
swap(pos[id[tmp]], pos[id[d]]);
swap(id[tmp], id[d]);
swap(val[tmp], val[d]);
tmp = d;
}
}
}
void modify(int i, int v) {
val[pos[i]] = v;
down(pos[i]);
pos[i] = up(pos[i]);
id[pos[i]] = i;
}
void pop(int &i) {
if (sz == ) {
i = -;
return ;
}
i = id[];
pos[i] = -;
if (sz == ) { sz--; return ;}
val[] = val[sz];
id[] = id[sz];
pos[id[]] = ;
sz--;
if (sz > ) down();
}
int gv(int i) { return ~pos[i] ? val[pos[i]] : -;}
} hp;
int dis[N]; int dij(int s, int t) {
int cur, i;
hp.init();
memset(dis, , sizeof(dis));
dis[s] = ;
hp.push(s, );
while (hp.sz) {
hp.pop(cur);
if (cur == t) return dis[cur];
for (i = eh[cur]; ~i; i = edge[i].nx) {
Edge &e = edge[i];
if (dis[e.t] > dis[cur] + e.c) {
dis[e.t] = dis[cur] + e.c;
if (~hp.gv(e.t)) hp.modify(e.t, dis[e.t]);
else hp.push(e.t, dis[e.t]);
}
}
}
return -;
} int main() {
int x, y, v;
int n, m;
while (~scanf("%d%d", &n, &m)) {
init();
while (m--) {
scanf("%d%d%d", &x, &y, &v);
addedge(x, y, v);
}
printf("%d\n", dij(, n));
}
return ;
}

——written by Lyon

poj 3159 Candies (dij + heap)的更多相关文章

  1. POJ 3159 Candies (图论,差分约束系统,最短路)

    POJ 3159 Candies (图论,差分约束系统,最短路) Description During the kindergarten days, flymouse was the monitor ...

  2. 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 ...

  3. poj 3159 Candies(dijstra优化非vector写法)

    题目链接:http://poj.org/problem?id=3159 题意:给n个人派糖果,给出m组数据,每组数据包含A,B,c 三个数,意思是A的糖果数比B少的个数不多于c,即B的糖果数 - A的 ...

  4. POJ 3159 Candies(SPFA+栈)差分约束

    题目链接:http://poj.org/problem?id=3159 题意:给出m给 x 与y的关系.当中y的糖数不能比x的多c个.即y-x <= c  最后求fly[n]最多能比so[1] ...

  5. POJ 3159 Candies(差分约束,最短路)

    Candies Time Limit: 1500MS   Memory Limit: 131072K Total Submissions: 20067   Accepted: 5293 Descrip ...

  6. POJ 3159 Candies(差分约束)

    http://poj.org/problem?id=3159 题意:有向图,第一行n是点数,m是边数,每一行有三个数,前两个是有向边的起点与终点,最后一个是权值,求从1到n的最短路径. 思路:这个题让 ...

  7. POJ 3159 Candies 解题报告(差分约束 Dijkstra+优先队列 SPFA+栈)

    原题地址:http://poj.org/problem?id=3159 题意大概是班长发糖果,班里面有不良风气,A希望B的糖果不比自己多C个.班长要满足小朋友的需求,而且要让自己的糖果比snoopy的 ...

  8. POJ 3159 Candies(差分约束+spfa+链式前向星)

    题目链接:http://poj.org/problem?id=3159 题目大意:给n个人派糖果,给出m组数据,每组数据包含A,B,C三个数,意思是A的糖果数比B少的个数不多于C,即B的糖果数 - A ...

  9. Invitation Cards POJ 1511 SPFA || dij + heap

    http://poj.org/problem?id=1511 求解从1去其他顶点的最短距离之和. 加上其他顶点到1的最短距离之和. 边是单向的. 第一种很容易,直接一个最短路, 然后第二个,需要把边反 ...

随机推荐

  1. js实现放大镜特效的实现方法

    <!doctype html><html lang="en"><head> <meta charset="UTF-8" ...

  2. fileinput URL携带参数的问题,uploadExtraData,Bootstrap

    因为无法在URL中执行其他代码,通过阅读文档可知可以由uploadExtraData参数携带数据.于是在这里携带,如果uploadExtraData 无法接收到数据,一般是格式有误, 先尝试这个简单的 ...

  3. 洛谷3128 [USACO15DEC]最大流Max Flow——树上差分

    题目:https://www.luogu.org/problemnew/show/P3128 树上差分.用离线lca,邻接表存好方便. #include<iostream> #includ ...

  4. 交互题(apio2016Gap)

    题目链接   //Serene #include<algorithm> #include<iostream> #include<cstring> #include& ...

  5. java如何访问memcache

    1       Memcache是什么 Memcache是danga.com的一个项目,最早是为 LiveJournal 服务的,目前全世界不少人使用这个缓存项目来构建自己大负载的网站,来分担数据库的 ...

  6. 微信小程序开发之图片等比例缩放 获取屏幕尺寸图片尺寸 自适应

    wxml: <image style="width: {{imagewidth}}px; height: {{imageheight}}px;"  src="{{i ...

  7. NFS服务器搭建与配置

    原文:https://blog.csdn.net/qq_38265137/article/details/83146421 NFS服务简介什么是NFS?NFS就是Network File System ...

  8. Pyhton AES_cbc解密

    最近很多朋友问我加密解密有没有啥好推荐的方式,一般对AES的加密解密方式直接用在线加密或者解密就行,我为了方便测试,将网址以python脚本的形式写了出来,很简单的东西,2分钟搞定,随手记录一下~~ ...

  9. 第一周<导学>

    导学 欧氏距离 平方 曼哈顿距离 一次方 马氏距离 协方差(先标准化再计算距离)\(d(x_{i},x_{j})=\sqrt{(x_{i}-x_{j})^{T}s^{-1}(x_{i}-x{j})}\ ...

  10. 如何实现已发布app的自动更新

    要实现app的自动更新,做两件事情就可以搞定 1.获取当前手机中的app版本号 我们可以通过查询mainbundle中的获取CFBundleVersion NSDictionary *infoDict ...