http://poj.org/problem?id=3159

题意:有向图,第一行n是点数,m是边数,每一行有三个数,前两个是有向边的起点与终点,最后一个是权值,求从1到n的最短路径。

思路:这个题让会神给讲的,用的dijkstra,看的网上很多用SPFA的。

关于SPFA:http://www.cnblogs.com/devtang/archive/2011/08/25/spfa.html

http://blog.csdn.net/chenjiang492943457/article/details/5375413
关于差分约束系统:http://www.cnblogs.com/void/archive/2011/08/26/2153928.html

代码:

#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <queue> using namespace std ;
const int maxn = ;
const int maxm = ;
int head[maxn],next[maxm] ;
int map[maxn] ;
bool vis[maxn] ;
const int INF = << ;
int cnt , n , m;
struct node
{
int u ;
int v ;
int c ;
node(){}
node(int u,int v,int c):u(u),v(v),c(c){} }edge[maxm] ; struct node1
{
int v,c ;
node1(){}
node1(int v,int c):v(v),c(c){}
bool operator <(const node1 &a)const
{
return c > a.c ;
}
} ;
void addnode(int u,int v,int c)
{
edge[cnt] = node(u,v,c) ;
next[cnt] = head[u] ;
head[u] = cnt++ ;
} ;
bool relax(int u,int v,int c)
{
if(map[v] > map[u] + c)
{
map[v] = map[u]+c ;
return true ;
}
return false ;
} void Init()
{
memset(head,-,sizeof(head)) ;
memset(next,-,sizeof(next)) ;
cnt = ;
for(int i = ; i < m ; i++)
{
int x,y,z ;
scanf("%d %d %d",&x,&y,&z) ;
addnode(x,y,z) ;
}
} void dija(int sh)
{
memset(vis,,sizeof(vis)) ;
for(int i = ; i <= n ; i++)
map[i] = INF ;
map[sh] = ;
priority_queue<node1>Q ;
Q.push(node1(sh,map[sh])) ;
for(int i = ; i < n ; i++)
{
while(!Q.empty() && vis[Q.top().v]) Q.pop() ;
if(Q.empty()) break ;
node1 temp = Q.top() ;
Q.pop() ;
vis[temp.v] = true ;
for(int j = head[temp.v] ; j != - ; j = next[j])
{
if(relax(temp.v,edge[j].v,edge[j].c) && !vis[edge[j].v])
Q.push(node1(edge[j].v,map[edge[j].v])) ;
}
}
}
int main()
{
while(~scanf("%d %d",&n,&m))
{
Init() ;
dija() ;
printf("%d\n",map[n]) ;
}
return ;
}

POJ 3159 Candies(差分约束)的更多相关文章

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

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

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

  3. poj 3159 Candies 差分约束

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

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

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

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

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

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

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

  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. 图论--差分约束--POJ 3159 Candies

    Language:Default Candies Time Limit: 1500MS   Memory Limit: 131072K Total Submissions: 43021   Accep ...

  10. (简单) POJ 3159 Candies,Dijkstra+差分约束。

    Description During the kindergarten days, flymouse was the monitor of his class. Occasionally the he ...

随机推荐

  1. 调用java的webservice返回null

    When you try invoke a Java/Axis Web Service from a proxy class generated by Visual Studio 2005 or Vi ...

  2. 什么是CS和BS结构,两种结构的区别

    什么是CS和BS结构,两种结构的区别 什么是C/S和B/S结构?         C/S又称Client/Server或客户/服务器模式.服务器通常采用高性能的PC.工作站或小型机,并采用大型数据库系 ...

  3. Spring之IOC容器初始化过程

    Ioc容器的初始化是由refresh()方法来启动的,这个方法标志着Ioc容器的正式启动. 具体来说这个启动过程包括三个基本过程: 1.BeanDifinition的Resource定位 2.Bean ...

  4. C#开发微信门户及应用-使用地理位置扩展相关应用

    C#开发微信门户及应用-使用地理位置扩展相关应用 我们知道,地理位置信息可以用来做很多相关的应用,除了我们可以知道用户所在的位置,还可以关联出一些地理位置的应用,如天气,热映影片,附近景点,附近影院, ...

  5. Java的基础概念

    JDK (Java Development Kit) Java Developer Kit contains tools needed to develop the Java programs, an ...

  6. 安装oracle 12c遇到问题

    安装前步骤:更改用户账户控制设置:从不通知  出现 "SEVERE: [FATAL] [INS-30014] 无法检查指定的位置是否位于 CFS 上" 解决办法:重新设置hosts ...

  7. ###STL学习--迭代器

    点击查看Evernote原文. #@author: gr #@date: 2014-08-23 #@email: forgerui@gmail.com STL中的迭代器. ###stl学习 |--迭代 ...

  8. selenium文件上传的实现

    一.对于上传文件, 从手动操作我们可以看出, 需要对window 窗体进行操作, 而对于selenium webdriver 在这方面应用就受到了限制. 但是, 庆幸的是, 对于含有input ele ...

  9. centos下 forever: 让nodejs应用后台执行

    在LINUX中我们可以使用这种简单的方式让node.js在后台运行: nohup node your_app.js & forever可以让我们做得更好,并且可以跨平台的在windows和Li ...

  10. 使用AutoMapper

    一.AutoMapper初探: [参考Using AutoMapper: Getting Started] 1.新建空的ASP.NET MVC项目. 2.在Models文件夹添加类: public c ...