题意 : 给出 P 个顶点以及 Q 条有向边,求第一个点到其他各点距离之和+其他各点到第一个点的距离之和的最小值

分析 : 不难看出 min( 第一个点到其他各点距离之和+其他各点到第一个点的距离之和 ) = min( 第一个点到其他各点距离之和) + min( 其他各点到第一个点的距离之和 ),前者较为简单,建好图后直接跑一遍最短路即得,关键在于后者怎么方便的求出来。这里利用到了一个逆向思维,如果将所有的有向边反过来,那么就能求出其他点到源点的最短路了,那么只要存储两种边,一个正向边(即题目所给)然后存一组反向边,两种建出来的图各自去跑一遍最短路最后相加即为结果

#include<bits/stdc++.h>
#include<ext/pb_ds/priority_queue.hpp>
using namespace std;
using namespace __gnu_pbds;
;
const int INF  = 0x3f3f3f3f;
typedef pair<int, int> pii;
struct EDGE{ int v, nxt, w; };
EDGE Edge[][maxn];
][maxn];

inline void init()
{
    ; i<=N; i++)
        Head[][i] = Head[][i] = -;
    cnt = ;
}

inline void AddEdge(int from, int to, int weight, int flag)
{
    Edge[flag][cnt].v = to;
    Edge[flag][cnt].nxt = Head[flag][from];
    Edge[flag][cnt].w = weight;
    Head[flag][from] = cnt++;
}

int Dis[maxn];

int Dijkstra(int flag)
{
    ; i<=N; i++)
        Dis[i] = INF;
    Dis[] = ;
    __gnu_pbds::priority_queue<pii,greater<pii>,pairing_heap_tag > Heap;
    Heap.push(make_pair(, ));
    pii Top;
    while(!Heap.empty()){
        Top = Heap.top(); Heap.pop();
        if(Dis[Top.second] != Top.first) continue;
        ; i=Edge[flag][i].nxt){
            int Eiv = Edge[flag][i].v;
            if(Dis[Eiv] > Dis[Top.second] + Edge[flag][i].w){
                Dis[Eiv] = Dis[Top.second] + Edge[flag][i].w;
                Heap.push(make_pair(Dis[Eiv], Eiv));
            }
        }
    }
    ;
    ; i<=N; i++)
        ret += Dis[i];
    return ret;
}

int main(void)
{
    int nCase;
    scanf("%d", &nCase);
    while(nCase--){
        scanf("%d %d", &N, &M);
        init();
        int from, to, weight;
        while(M--){
            scanf("%d %d %d", &from, &to, &weight);
            AddEdge();
            AddEdge(to, );
        }
        ;
        ans += Dijkstra();
        ans += Dijkstra();
        printf("%d\n", ans);
    }
    ;
}

POJ 1511 Invitation Cards ( 双向单源最短路 || 最小来回花费 )的更多相关文章

  1. POJ 1511 Invitation Cards(单源最短路,优先队列优化的Dijkstra)

    Invitation Cards Time Limit: 8000MS   Memory Limit: 262144K Total Submissions: 16178   Accepted: 526 ...

  2. POJ-1511 Invitation Cards (单源最短路+逆向)

    <题目链接> 题目大意: 有向图,求从起点1到每个点的最短路然后再回到起点1的最短路之和. 解题分析: 在求每个点到1点的最短路径时,如果仅仅只是遍历每个点,对它们每一个都进行一次最短路算 ...

  3. POJ 1511 Invitation Cards / UVA 721 Invitation Cards / SPOJ Invitation / UVAlive Invitation Cards / SCU 1132 Invitation Cards / ZOJ 2008 Invitation Cards / HDU 1535 (图论,最短路径)

    POJ 1511 Invitation Cards / UVA 721 Invitation Cards / SPOJ Invitation / UVAlive Invitation Cards / ...

  4. poj 1511 Invitation Cards (最短路)

    Invitation Cards Time Limit: 8000MS   Memory Limit: 262144K Total Submissions: 33435   Accepted: 111 ...

  5. Invitation Cards POJ - 1511 (双向单源最短路)

    In the age of television, not many people attend theater performances. Antique Comedians of Malidine ...

  6. POJ-1511 Invitation Cards (双向单源最短路)

    Description In the age of television, not many people attend theater performances. Antique Comedians ...

  7. [POJ] 1511 Invitation Cards

    Invitation Cards Time Limit: 8000MS   Memory Limit: 262144K Total Submissions: 18198   Accepted: 596 ...

  8. Poj 1511 Invitation Cards(spfa)

    Invitation Cards Time Limit: 8000MS Memory Limit: 262144K Total Submissions: 24460 Accepted: 8091 De ...

  9. SPFA算法(2) POJ 1511 Invitation Cards

    原题: Invitation Cards Time Limit: 8000MS   Memory Limit: 262144K Total Submissions: 31230   Accepted: ...

随机推荐

  1. oracle 11g不能导出空表的解决方法

    在oracle 11g r2中,发现传统的exp居然不能导出空的表,然后查询一下,  发现需要如下的步骤去搞,笔记之.    oracle 11g 新增了一个参数:deferred_segment_c ...

  2. Binder的Native实现libbinder

    libbinder – Binder的Native实现 出于性能和代码统一性的角度考虑,Binder IPC并不Java和Native环境里各实现一次,而只是分别在不同的执行环境里提供使用的接口.使用 ...

  3. Android在WindowManagerService和ActivityManagerService中的Token

    https://upload-images.jianshu.io/upload_images/5688445-6cf0575bb52ccb45.png 1. ActivityRecord中的token ...

  4. C#扩展方法 DataTable.ToEntitys

    类A需要添加功能,我们想到的就是在类A中添加公共方法,这个显而易见肯定可以,但是由于某种原因,你不能修改类A本身的代码,但是确实又需要增加功能到类A中去,怎么办? 这个时候扩展方法(Extension ...

  5. windows10配置Docker容器独立IP地址互相通信

    Docker官方推荐我们通过端口映射的方式把Docker容器的服务提供给宿主机或者局域网其他容器使用.一般过程是: 1.Docker进程通过监听宿主机的某个端口,将该端口的数据包发送给Docker容器 ...

  6. linux命令了的查找顺序

    $PATH,从左到右依次查找. 遇到第一个匹配的命令就立即停止查找.

  7. hdu-2819.swap(二分匹配 + 矩阵的秩基本定理)

    Swap Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  8. webpack4 es6转换

    在webpack里用es6语法, ie浏览器不识别,为了让浏览器识别,需要用到bebal转换; bebal,英文是通天塔 的意思, 我们常说的巴比伦也是这个词;我估计是当初设计者是想用它作为一个沟通e ...

  9. Nginx负载均衡的max_fails和fail_timeout的默认配置问题

    今天发现一个奇怪的现象,前端请求后端服务多次后会超时一次,经过多次验证确定是大概10s左右就会超时一次,检查后端服务,发现其中一个节点已经夯死. 但是我们的nginx负载均衡策略是轮询机制,按照配置来 ...

  10. Vue+axios+Node+express实现文件上传(用户头像上传)

    Vue 页面的代码 <label for='my_file' class="theme-color"> <mu-icon left value="bac ...