poj3159candies

来源:互联网 发布:游戏截图软件fraps 编辑:程序博客网 时间:2024/06/05 07:40

差分约束

建图,求1到n最短路

要用栈spfa,否则会TLE。

#include<stdio.h>#include<string.h>#include<queue>#include<algorithm>using namespace std;typedef long long ll;struct node{ll to,next,len;}edge[150005];ll head[150005];ll cnt;void add(ll f,ll t,ll l){edge[cnt].to=t;edge[cnt].len=l;edge[cnt].next=head[f];head[f]=cnt++;}ll n,m;ll vis[150005];ll dis[150005];ll spfa(){ll que[150005];memset(vis,0,sizeof(vis));memset(dis,0x3f,sizeof(dis));dis[1]=0;vis[1]=1;que[1]=1;ll tot=1;while(tot!=0){ll u=que[tot--];vis[u]=0;for(ll i=head[u];i!=-1;i=edge[i].next){ll v=edge[i].to;if(dis[v]>dis[u]+edge[i].len){dis[v]=dis[u]+edge[i].len;if(vis[v]==0){vis[v]=1;que[++tot]=v;}}}}return dis[n];}int main(){while(scanf("%lld %lld",&n,&m)!=EOF){cnt=0;memset(head,-1,sizeof(head));for(ll i=1;i<=m;i++){ll a,b,c;scanf("%lld %lld %lld",&a,&b,&c);add(a,b,c);}printf("%lld\n",spfa());}}

0 0