Candies POJ - 3159

第一道差分约束
题意:熊孩纸系列…………
A认为B不会比他多c颗糖及
candies[B] <= candies[A] + C
与d[v] <= d[u] + e.cost 类似

#include <iostream>
#include <vector>
#include <stack>
#include <cstring>
#include <cstdio>
using namespace std;
#define INF 1<<30
#define MAX_V 50000
#define MAX_E 300000
struct edge
{
  int v;
  int cost;
  int next;
};
struct edge es[MAX_E];
int head[MAX_V];
int len = 0;
void add ( int from, int to, int val )
{
  es[len].v = to;
  es[len].cost = val;
  es[len].next = head[from];
  head[from] = len++;
}
int V;
bool inqueue[MAX_V];
int d[MAX_V];
void spfa ( int s )
{
  for ( int i = 0; i <= V; i++ )
  { d[i] = INF; }
  memset ( inqueue, 0, sizeof inqueue );
  d[s] = 0;
  inqueue[s] = true;
  stack<int> Q;
  Q.push ( s );
  while ( !Q.empty() )
  {
    int u = Q.top();
    Q.pop();
    inqueue[u] = false;
    for ( int i = head[u]; i != -1; i = es[i].next )
    {
      int v = es[i].v;
      if ( d[v] > d[u] + es[i].cost )
      {
        d[v] = d[u] + es[i].cost;
        if ( !inqueue[v] )
        {
          Q.push ( v );
          inqueue[v] = true;
        }
      }
    }
  }
}
void init()
{
  int M;
  scanf ( "%d%d", &V, &M );
  memset ( head, -1, sizeof head );
  for ( int i = 0; i < M; i++ )
  {
    int from, to, val;
    scanf ( "%d%d%d", &from, &to, &val );
    add ( from, to, val );
  }
}
int main()
{
  init();
  spfa ( 1 );
  printf ( "%d\n", d[V] );
  return 0;
}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • **2014真题Directions:Read the following text. Choose the be...
    又是夜半惊坐起阅读 9,921评论 0 23
  • 我喜欢一个人走在陌生的街头,看墙壁上凹陷的小店。。 我喜欢拿着相机,一路记录,每条街,每处风景。 我喜欢一个人,天...
    南有麋鹿0io阅读 220评论 1 5
  • 一个人会落泪,是因为痛;一个人之所以痛,是因为在乎;一个人之所以在乎,是因为有感觉;一个人之所以有感觉,仅因为你是...
    逍遥_9353阅读 461评论 0 5
  • 生活丰富多彩,窍门无处不在,有时候小窍门能帮我们把生活中遇到的难题,消除我们的烦恼。 有一次我写作业时...
    孟向阳阅读 409评论 0 1
  • 我有横向的爱情 它似向日葵一般横向的排列 向日葵转身的地方 是有你的白天和黑夜 我有横向的爱情 它用紧密细致横向的...
    舒严阅读 388评论 0 0