71 lines
1.2 KiB
C++
71 lines
1.2 KiB
C++
//youwu
|
||
#include <iostream>
|
||
#include<cstdio>
|
||
#include<algorithm>
|
||
#include<cstring>
|
||
#include<stack>
|
||
using namespace std;
|
||
const int N=3e4+5,N3=15e4+5,inf=0x3f3f3f3f;
|
||
int to[N3],ne[N3],w[N3],h[N],cnt=0,s=N-4,e,dist[N];
|
||
bool in[N],wa=0,u,v,w1;
|
||
int n,m,maxn=0;
|
||
void add(int u,int v,int w1)
|
||
{
|
||
to[++cnt]=v;
|
||
ne[cnt]=h[u];
|
||
w[cnt]=w1;
|
||
h[u]=cnt;
|
||
}
|
||
void spfa()
|
||
{
|
||
stack<int>q;//queue没有自带函数清零
|
||
q.push(s);
|
||
while(!q.empty())
|
||
{
|
||
int u=q.top();
|
||
q.pop();
|
||
in[u]=0;//spfa的精髓!!
|
||
for(int i=h[u];i;i=ne[i])
|
||
{
|
||
int v=to[i],w1=w[i];
|
||
// printf("%d %d %d\n",u,v,w1);
|
||
if(dist[u]+w1<dist[v])
|
||
{
|
||
dist[v]=dist[u]+w1;
|
||
// printf("%d(%d) %d(%d) %d\n",u,dist[u],v,dist[v],w1);
|
||
if(!in[v])
|
||
{
|
||
q.push(v);
|
||
in[v]=1;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
int main()
|
||
{
|
||
scanf("%d%d",&n,&m);
|
||
for(int i=0;i<=n;i++)
|
||
{
|
||
dist[i]=inf;
|
||
}
|
||
for(int i=1;i<=m;i++)//n,m不分
|
||
{
|
||
scanf("%d%d%d",&u,&v,&w1);
|
||
add(u,v,w1);
|
||
}
|
||
s=1;
|
||
dist[s]=0;
|
||
spfa();
|
||
maxn=0;
|
||
// for(int i=2;i<=n;i++)
|
||
// {
|
||
// if(dist[i]>maxn)
|
||
// {
|
||
// maxn=dist[i];
|
||
// }
|
||
// }
|
||
printf("%d",dist[n]);
|
||
return 0;
|
||
}
|