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û<65><C3BB><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
q.push(s);
|
|||
|
while(!q.empty())
|
|||
|
{
|
|||
|
int u=q.top();
|
|||
|
q.pop();
|
|||
|
in[u]=0;//spfa<66>ľ<EFBFBD><C4BE>裡<EFBFBD><E8A3A1>
|
|||
|
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<><6D><EFBFBD><EFBFBD>
|
|||
|
{
|
|||
|
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;
|
|||
|
}
|