poj3159 Candies 差分约束+spfa+模拟stack

来源:互联网 发布:js动作标记有哪些 编辑:程序博客网 时间:2024/06/05 16:47
题目
题意:小朋友分糖,满足所有人要求下使得差距最大,输出最大差距;
#include <iostream>#include<cstdio>#include<stack>#include<cstring>#include<cmath>#define N 33000#define E 155000#define INF 0x3f3f3f3fusing namespace std;struct node{    int to,next,v;}e[E];int v[N],d[N],s[N],head[N],n,m;void spfa(){    for(int i=1;i<=n;i++)        d[i]=INF,v[i]=0;    v[1]=1;    d[1]=0;    int top=0;    s[++top]=1;    while(top!=0)    {        int t=s[top--];        v[t]=0;        for(int i=head[t];i!=-1;i=e[i].next)        {            int b=e[i].to,val=e[i].v;            if(d[b]>d[t]+val)            {                d[b]=d[t]+val;                if(!v[b])                    s[++top]=b,v[b]=1;            }        }    }    cout<<d[n]<<endl;}int main(){    while(~scanf("%d%d",&n,&m))    {        memset(head,-1,sizeof(head));        for(int i=1;i<=m;i++)        {            int a,b,val;            scanf("%d%d%d",&a,&b,&val);            e[i].to=b;            e[i].v=val;            e[i].next=head[a];            head[a]=i;        }        spfa();    }}


2 0