您的位置:首页 > 其它

PKU 3159 Candies

2008-07-10 21:24 309 查看
#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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: