题目链接:

https://vjudge.net/problem/POJ-1511

题目大意:

给定节点数n,和边数m,边是单向边.

问从1节点出发到2,3,...n 这些节点路程和从从这些节点回来到节点1的路程和最小值。

n,m不超过1e6

思路:

POJ-3268是一样的,大概思路都是正向从源点求最短路,然后把图反向,再从源点求最短路,但是这道题是它的进阶版本,由于点数过多,不可以用邻接矩阵存图,这里用前向星存图,同时存下两张图,一张正向,一张反向。Dijkstra算法用队列优化,注意用long long存答案和dist最短路距离。其他的就是模板题了。

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<queue>
#include<stack>
#include<map>
#include<set>
#include<sstream>
using namespace std;
typedef long long ll;
const int maxn = 1e6 + ;
const int INF = 1e9 + ;
int T, n, m, cases;
struct edge
{
int next, u, v, w;
};
edge a[][maxn];//a[0][]存正边 a[1][]存反边
ll d[maxn];
int head[][maxn];
bool v[maxn];
void init()
{
memset(head, -, sizeof(head));
}
struct HeapNode
{
int d, u;//d是距离,u是顶点
HeapNode(){}
HeapNode(int d, int u):d(d), u(u){}
bool operator <(const HeapNode & a)const
{
return d > a.d;
}
};
void dijkstra(int cnt)
{
priority_queue<HeapNode>q;
for(int i = ; i <= n; i++)d[i] = INF;
d[] = ;
memset(v, , sizeof(v));
q.push(HeapNode(, ));
while(!q.empty())
{
HeapNode now = q.top();
q.pop();
int u = now.u;
if(v[u])continue;
v[u] = ;//标记
for(int i = head[cnt][u]; ~i; i = a[cnt][i].next)
{
edge& e = a[cnt][i];
int v = e.v, w = e.w;
if(d[v] > d[u] + w)
{
d[v] = d[u] + w;
q.push(HeapNode(d[v], v));
}
}
}
}
int main()
{
scanf("%d", &T);
while(T--)
{
init();
scanf("%d%d", &n, &m);
int u, v, w;
for(int i = ; i <= m; i++)
{
scanf("%d%d%d", &u, &v, &w);
//正向存边
a[][i].u = u;
a[][i].v = v;
a[][i].w = w;
a[][i].next = head[][u];
head[][u] = i;
//反向存边
a[][i].u = v;
a[][i].v = u;
a[][i].w = w;
a[][i].next = head[][v];
head[][v] = i;
}
ll ans = ;
dijkstra();
for(int i = ; i <= n; i++)ans += d[i];
dijkstra();
for(int i = ; i <= n; i++)ans += d[i];
cout<<ans<<endl;
}
return ;
}

POJ-1511 Invitation Cards---Dijkstra+队列优化+前向星正向反向存图的更多相关文章

  1. POJ 1511 Invitation Cards(Dijkstra(优先队列)+SPFA(邻接表优化))

    题目链接:http://poj.org/problem?id=1511 题目大意:给你n个点,m条边(1<=n<=m<=1e6),每条边长度不超过1e9.问你从起点到各个点以及从各个 ...

  2. POJ 1511 - Invitation Cards (dijkstra优先队列)

    题目链接:http://poj.org/problem?id=1511 就是求从起点到其他点的最短距离加上其他点到起点的最短距离的和 , 注意路是单向的. 因为点和边很多, 所以用dijkstra优先 ...

  3. poj 1511 Invitation Cards(dijstra优化)

    题目链接:http://poj.org/problem?id=1511 题意:给出n个点和n条有向边,求所有点到源点1的来回最短路之和(保证每个点都可以往返源点1) 题目比较简单就是边和点的个数有点多 ...

  4. 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 / ...

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

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

  6. DIjkstra(反向边) POJ 3268 Silver Cow Party || POJ 1511 Invitation Cards

    题目传送门 1 2 题意:有向图,所有点先走到x点,在从x点返回,问其中最大的某点最短路程 分析:对图正反都跑一次最短路,开两个数组记录x到其余点的距离,这样就能求出来的最短路以及回去的最短路. PO ...

  7. POJ 1511 Invitation Cards 链式前向星+spfa+反向建边

    Invitation Cards Time Limit: 8000MS   Memory Limit: 262144K Total Submissions: 27200   Accepted: 902 ...

  8. [POJ] 1511 Invitation Cards

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

  9. poj 1511 Invitation Cards(最短路中等题)

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

随机推荐

  1. Java技术总结

    1.在非空判断是一定把not null 判断写前边,否则如果为空先判断size为0会报错 String str = null; if(str !=null&&str.length()& ...

  2. [机器学习Lesson 1 Introduction] 机器学习的动机与应用

    1. Machine Learning definition(机器学习定义) Arthur Samuel(1959年)将机器学习非正式定义为:在不直接针对问题进行编程的情况下,赋予计算机学习能力的一个 ...

  3. Docker 网络管理及容器跨主机通信

    1.网络模式 docker支持四种网络模式,使用--net选项指定: host,--net=host,如果指定此模式,容器将不会获得一个独立的network namespace,而是和宿主机共用一个. ...

  4. Matlab绘图基础——一些标准三维曲面

    标准三维曲面 t=0:pi/20:2*pi; [x,y,z]= cylinder(2+sin(t),30);     %[x,y,z]= cylinder(R,n),其中R为圆周半径,n为组成圆周的点 ...

  5. 如何修改HTML5 input placeholder 颜色

    有三种实现方式:伪元素(pseudo-elements).伪类( pseudo-classes)和Notihing. WebKit和Blink(Safari,Google Chrome, Opera1 ...

  6. python全栈学习--day11(函数高级应用)

    一,函数名是什么? 函数名是函数的名字,本质:变量,特殊的变量. 函数名()执行此函数 ''' 在函数的执行(调用)时:打散. *可迭代对象(str,tuple,list,dict(key))每一个元 ...

  7. 关于Netty的入门使用

    Netty介绍: Netty是一个提供异步事件驱动的网络应用框架,用以快速开发高性能.高可靠性的网络服务器和客户端程序. 换句话说,Netty是一个NIO框架,使用它可以简单快速地开发网络应用程序,比 ...

  8. JavaScript(第二十天)【DOM操作表格及样式】

    DOM在操作生成HTML上,还是比较简明的.不过,由于浏览器总是存在兼容和陷阱,导致最终的操作就不是那么简单方便了.本章主要了解一下DOM操作表格和样式的一些知识. 一.操作表格 <table& ...

  9. python array 使用创建10万浮点数

    from array import array from random floats = array('d',random((for i in range(10**7)) fp = open('flo ...

  10. python的PEP8 代码风格指南

    PEP8 代码风格指南 这篇文章原文实际上来自于这里:https://www.python.org/dev/peps/pep-0008/ 知识点 代码排版 字符串引号 表达式和语句中的空格 注释 版本 ...