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. c# 远程监控(2) 摄像头调研及模拟

    经过N多调研,最终选择了OpenCV(Emgu CV) ** 至于DirectShow, OpenCV等等其他大家可以百度,在这里我就不再赘述 环境:vs2010 vs2012 vs2013均可 Op ...

  2. asp快速开发方法之分页函数

    log_Content "自己常用的ASP分页代码,将以下代码放入你的函数文件内,在使用的文件内写上<!--#include file="调用文件.asp" /&g ...

  3. Android数据存储方式之SharedPreferences

    Android平台给我们提供了一个SharedPreferences类,它是一个轻量级的存储类,特别适合用于保存软件配置参数.使用SharedPreferences保存数据,其背后是用xml文件存放数 ...

  4. Warning: Attempt to present * on * which is already presenting *

    Warning: Attempt to present (要被presented的控制器)  on (哪个控制器来presenting) which is already presenting (已经 ...

  5. IOS- 最简单的反向传值- block

    block 常用于反向传值 声明 返回值类型 (^block)(参数列表) 调用 闭包的名字=^(参数列表){}: 闭包的名字(): 如: void(^aaaaa)(int num,NSString ...

  6. 12天学好C语言——记录我的C语言学习之路(Day 4)

    12天学好C语言--记录我的C语言学习之路 Day 4: 首先来看一段程序: //输出下面4*5的矩阵 /* 1  2  3   4   5 2  4  6   8   10 3  6  9   12 ...

  7. Android笔记之adb命令应用实例1(手机端与PC端socket通讯下)

    通过adb和Android通讯需要引用adb相关的组件到项目中,分别为:adb.exe,AdbWinApi.dll,AdbWinUsbApi.dll. 可以在XXX\sdk\platform-tool ...

  8. nodejs连接MySQL数据库

    在github上搜索orm2 https://github.com/dresende/node-orm2: 在项目文件夹使用npm install orm下载下来,然后书写配置文件 var orm = ...

  9. jquery动态插入行

    这是一个利用jquery动态插入输入内容的代码. html代码: <div title="分表2" class="ui-edit" style=" ...

  10. js中对闭包的理解

    本人丝一枚,在刚刚过去的javascript学习中,对闭包这个知识真是,听课两分钟,懵逼一整天.今天闲来没事,看了下闭包.话不多说先上代码. <!DOCTYPE html> <htm ...