#include <iostream>
#include <vector>
#include <queue>
#define MAXN 30001
using namespace std;
struct type1
{
int v, w;
bool operator < (const type1& e) const {
return w > e.w;
}
};
int D[MAXN];
int dijk(vector<vector<type1> >& map, int s, int t)
{
priority_queue<type1> q;
bool mk[MAXN] = {false};
type1 e = {s, 0}, ne;
int i, k, tmp;
D[s] = 0;
q.push(e);
while (!q.empty())
{
e = q.top();
q.pop();
if (mk[e.v]) continue;
if (e.v == t) return D[t];
for (mk[e.v] = true, i = 0; i < map[e.v].size(); i++)
{
k = map[e.v][i].v;
if (!mk[k] && (tmp = e.w + map[e.v][i].w) < D[k])
{
D[ne.v = k] = ne.w = tmp;
q.push(ne);
}
}
}
return D[t];
}
int main()
{
int n, m;
int a, b, c;
type1 t;
scanf("%d %d", &n, &m);
vector<vector<type1> > map(n);
for (int i = 0; i < n; i++)
D[i] = INT_MAX;
while (m--)
{
scanf("%d %d %d", &a, &b, &c);
t.v = b - 1;
t.w = c;
map[a-1].push_back(t);
}
printf("%d\n", dijk(map, 0, n-1));
return 0;
}
#include <vector>
#include <queue>
#define MAXN 30001
using namespace std;
struct type1
{
int v, w;
bool operator < (const type1& e) const {
return w > e.w;
}
};
int D[MAXN];
int dijk(vector<vector<type1> >& map, int s, int t)
{
priority_queue<type1> q;
bool mk[MAXN] = {false};
type1 e = {s, 0}, ne;
int i, k, tmp;
D[s] = 0;
q.push(e);
while (!q.empty())
{
e = q.top();
q.pop();
if (mk[e.v]) continue;
if (e.v == t) return D[t];
for (mk[e.v] = true, i = 0; i < map[e.v].size(); i++)
{
k = map[e.v][i].v;
if (!mk[k] && (tmp = e.w + map[e.v][i].w) < D[k])
{
D[ne.v = k] = ne.w = tmp;
q.push(ne);
}
}
}
return D[t];
}
int main()
{
int n, m;
int a, b, c;
type1 t;
scanf("%d %d", &n, &m);
vector<vector<type1> > map(n);
for (int i = 0; i < n; i++)
D[i] = INT_MAX;
while (m--)
{
scanf("%d %d %d", &a, &b, &c);
t.v = b - 1;
t.w = c;
map[a-1].push_back(t);
}
printf("%d\n", dijk(map, 0, n-1));
return 0;
}
浙公网安备 33010602011771号