题意:分配糖果,A,B,C表示A最多比B少多少糖果,求最后n比1最多能多多少糖果
用queue做会超时ㄟ( ▔, ▔ )ㄏ
#include<iostream>
#include<cstdio>
#include<cstring>
#include<stack>
#define inf 0x3f3f3f3f
using namespace std;
const int maxn=150006;
int d[maxn/3],n,m;
bool vis[maxn/3];
int head[maxn],cnt;
struct node
{
int v,w,next;
}p[maxn];
void add(int u,int v,int w)
{
p[cnt].v=v;
p[cnt].w=w;
p[cnt].next=head[u];
head[u]=cnt++;
}
void spfa()
{
for(int i=1;i<=n;i++)
{
vis[i]=0;
d[i]=inf;
}
stack<int>q;
q.push(1);
vis[1]=1;
d[1]=0;
while(!q.empty())
{
int x=q.top();
q.pop();
vis[x]=0;
for(int i=head[x];i!=-1;i=p[i].next)
{
if(d[p[i].v]>d[x]+p[i].w)
{
d[p[i].v]=d[x]+p[i].w;
if(!vis[p[i].v])
{
vis[p[i].v]=1;
q.push(p[i].v);
}
}
}
}
}
int main()
{
scanf("%d%d",&n,&m);
cnt=0;
memset(head,-1,sizeof(head));
for(int i=0;i<m;i++)
{
int u,v,w;
scanf("%d%d%d",&u,&v,&w);
add(u,v,w);
}
spfa();
printf("%d\n",d[n]);
return 0;
}