poj3255.cpp

来自「本人最近在acm.pku.edu.cn上通过的程序」· C++ 代码 · 共 58 行

CPP
58
字号
#include <algorithm>
#include <vector>
#include <queue>
using namespace std;

struct node
{
    int     v, w;
    node(int _v = 0, int _w = 0)
    {
        v = _v;  w = _w;
    }
};

bool operator < (const node &a, const node &b)
{
    return a. w > b. w; 
}

int     n, m;
vector<node>     g[5010];
int     d[5010][2];
int     num[5010];
priority_queue<node>    q;

int main()
{
    scanf("%d %d", &n, &m);
    int     a, b, c;
    while (m--)
    {
        scanf("%d %d %d", &a, &b, &c);
        g[a]. push_back(node(b, c));
        g[b]. push_back(node(a, c));
    }
    memset(d, 0, sizeof(d));
    memset(num, 0, sizeof(num));
    d[1][0] = 0;
    q. push(node(1,0));
    int     tv, td;
    size_t  k;
    while (!q. empty())
    {
        tv = q. top(). v;  td = q.top(). w;
        q. pop();
        if (num[tv] < 2)
        {
            d[tv][num[tv]] = td;
            num[tv]++;
            for (k = 0; k < g[tv]. size(); k++)
                if (num[g[tv][k]. v] < 2)
                    q. push( node(g[tv][k].v, td + g[tv][k]. w) );
        }
    }
    printf("%d\n", d[n][1]);
    return 0;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?