题意:小朋友分糖,满足所有人要求下使得差距最大,输出最大差距;
#include <iostream>
#include<cstdio>
#include<stack>
#include<cstring>
#include<cmath>
#define N 33000
#define E 155000
#define INF 0x3f3f3f3f
using 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();
}
}