邮递员送信 (dijkstra+反图)

题目链接:P1629
此题为有向图。
本题要求快递站到每一个地方的最短距离,类型应该是单源最短路径,但是又有一个要求,还需要知道每个点到起点的最短路径,这看起来需要求多源最短路径,其实不然,只需要在存图的时候附加一个反图,并且对反图再跑一遍单源最短路径即可。
存图的时候选择了用vector实现邻接表来存图(问就是链式前向星不会)
AC代码:

#include
using namespace std;
int dis[3005];
int vis[3005];
const int inf =99999999;
struct node
{
    int from;
    int to;
    int value;
    bool operator<(const node &a)const
    {
        return value>a.value;
    }
};

struct cun
{
    int edge;
    int money;
};
vectornumbers[3005];
void dijkstra(int k)
{
    priority_queueans;
    node t={k,k,0};
    ans.push(t);
    while(!ans.empty())
    {
        t=ans.top();
        ans.pop();
        if(vis[t.to])continue;
        vis[t.to]=1;
        for(int i=0;i>m>>n;
    for(int i=2;i<=m;i++)dis[i]=inf;
    for(int i=1502;i<=m+1500;i++)dis[i]=inf;
    long long res=0;
    for(int i=0;i>a>>b>>c;
        numbers[a].push_back((cun){b,c});
        numbers[b+1500].push_back((cun){a+1500,c});
    }
    dijkstra(1);
    dijkstra(1501);
    for(int i=1;i<=m;i++)
    {
        //cout<

你可能感兴趣的:(个人题解,dijkstra)