题意 : 给出 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. python常用包官网

    Pandas http://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.reset_index.html?high ...

  2. JDK+Tomcat+Eclipse环境搭建过程记录

    这学期选了一门公选课叫网络开发工具与技术,主要学习用JSP语言构建网站.在配置环境的过程中遇到不少的坑,于是记录下来,希望能帮到大家. 系统环境:Win10 JDK版本:8u121, JAVA版本1. ...

  3. Java 与 C++ 的比较

    参考 Java 中,一切皆是类 Java 中,所有数据或方法都要放在类中.如果想获得与全局函数等价的功能,可将static方法和static数据放在类里.而 C++ 中有 struct 结构.enum ...

  4. ecshop注册用户增加手机验证功能

    1.去掉“用户名”注册 a.去掉提交 user_passport.dwt页面去掉 <input name="username" type="text" s ...

  5. elementUi--->实现上传图片效果(upload+formData)

    现在谈一下elelmentui中使用Upload 上传通过点击或者拖拽上传文件(图片) <el-upload name="multfile"    //上传的文件字段名 cl ...

  6. Java枚举enum关键字

    枚举的理解 枚举其实就是一个类,枚举类的实例是一组限定的对象 传统的方式创建枚举 [了解] 对比:单例类 1.构造器私有化 2.本类内部创建对象 3.通过public static方法,对外暴露该对象 ...

  7. 使用userAgent区分浏览器版本

    使用userAgent区分浏览器版本:https://blog.csdn.net/n447194252/article/details/76255489 JS根据userAgent值来判断浏览器的类型 ...

  8. Codeforces 840C 题解(DP+组合数学)

    题面 传送门:http://codeforces.com/problemset/problem/840/C C. On the Bench time limit per test2 seconds m ...

  9. Acwing143. 最大异或对

    在给定的N个整数A1,A2……ANA1,A2……AN中选出两个进行xor(异或)运算,得到的结果最大是多少? 输入格式 第一行输入一个整数N. 第二行输入N个整数A1A1-ANAN. 输出格式 输出一 ...

  10. 1.go语言目录结构

    [root@localhost ~]# ll /go/ total drwxr-xr-x. root root May : api -rw-r--r--. root root May : AUTHOR ...