写了双向的(没过样例)
#include <bits/stdc++.h>
using namespace std;
struct ff {long long u,v,w;};
long long n,m;
long long sx;
long long dis[100005];
vector<ff> s;
vector<long long> a[100005];
bool b[100005];
priority_queue<pair<long long,long long> > ab;
int main()
{
cin>>n>>m;
sx=1;
for(int i=1;i<=m;i++)
{
ff e;
cin>>e.u>>e.v>>e.w;
s.push_back(e);
swap(e.u,e.v);
s.push_back(e);
}
for(int i=0;i<m;i++) a[s[i].u].push_back(i);
for(int i=1;i<=n;i++) dis[i]=1e9;
dis[sx]=0;
ab.push(make_pair(dis[sx],sx));
while(!ab.empty())
{
long long u=ab.top().second;
ab.pop();
if(b[u]==1) continue;
b[u]=1;
for(int j=0;j<a[u].size();j++)
{
long long v=s[a[u][j]].v;
long long w=s[a[u][j]].w;
if(b[v]==0&&dis[v]>dis[u]+w)
{
dis[v]=dis[u]+w;
ab.push(make_pair(-dis[v],v));
}
}
}
cout<<dis[n];
return 0;
}
没写双向(过了样例)
#include <bits/stdc++.h>
using namespace std;
struct ff {long long u,v,w;};
long long n,m;
long long sx;
long long dis[100005];
vector<ff> s;
vector<long long> a[100005];
bool b[100005];
priority_queue<pair<long long,long long> > ab;
int main()
{
cin>>n>>m;
sx=1;
for(int i=1;i<=m;i++)
{
ff e;
cin>>e.u>>e.v>>e.w;
s.push_back(e);
}
for(int i=0;i<m;i++) a[s[i].u].push_back(i);
for(int i=1;i<=n;i++) dis[i]=1e9;
dis[sx]=0;
ab.push(make_pair(dis[sx],sx));
while(!ab.empty())
{
long long u=ab.top().second;
ab.pop();
if(b[u]==1) continue;
b[u]=1;
for(int j=0;j<a[u].size();j++)
{
long long v=s[a[u][j]].v;
long long w=s[a[u][j]].w;
if(b[v]==0&&dis[v]>dis[u]+w)
{
dis[v]=dis[u]+w;
ab.push(make_pair(-dis[v],v));
}
}
}
cout<<dis[n];
return 0;
}