HDU 1874 - 畅通工程续

传送门

HDU 1874 - 畅通工程续

代码

#include <cstdio>
#include <algorithm>
#include <cstring>
#include <queue>
#include <vector>
#include <iostream>
#include <string>
#include <map>
using namespace std;
#define LL long long
#define MP(a, b) make_pair(a, b)
const int MAXN = 200 + 5;
const int INF = 0x3f3f3f3f;
 
typedef pair<int, int> pii;
priority_queue<pii, vector<pii>, greater<pii> >qu;
int mp[MAXN][MAXN], k;
map<string, int> dic;
int n, d[MAXN];
 
void Dijkstra(int start)
{
    memset(d, 0x3f, sizeof d);
    d[start] = 0;
    qu.push(MP(d[start], start));
    while (!qu.empty())
    {
        pii u = qu.top();
        qu.pop();
        int x = u.second;
        if (d[x] != u.first)
            continue;
        for (int i = 0; i < n; i++)
        {
            if (d[i] > d[x] + mp[x][i])
            {
                d[i] = d[x] + mp[x][i];
                qu.push(MP(d[i], i));
            }
        }
    }
}
 
int main()
{
    //freopen("input.txt", "r", stdin);
    int nr, i, j, a, b, w, st, ed;
    while (~scanf("%d%d", &n, &nr))
    {
        for (i = 0; i < n; i++)
            for (j = 0; j < n; j++)
                mp[i][j] = (i == j ? 0 : INF);
        for (i = 0; i < nr; i++)
        {
            scanf("%d%d%d", &a, &b, &w);
            mp[a][b] = mp[b][a] = min(w, mp[a][b]);
        }
        scanf("%d%d", &st, &ed);
        Dijkstra(st);
        printf("%d\n", d[ed] == INF ? -1 : d[ed]);
    }
    return 0;
}

Powered by Jekyll and Theme by solid