POJ-1511 Invitation Cards---Dijkstra+队列优化+前向星正向反向存图
题目链接:
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+队列优化+前向星正向反向存图的更多相关文章
- POJ 1511 Invitation Cards(Dijkstra(优先队列)+SPFA(邻接表优化))
题目链接:http://poj.org/problem?id=1511 题目大意:给你n个点,m条边(1<=n<=m<=1e6),每条边长度不超过1e9.问你从起点到各个点以及从各个 ...
- POJ 1511 - Invitation Cards (dijkstra优先队列)
题目链接:http://poj.org/problem?id=1511 就是求从起点到其他点的最短距离加上其他点到起点的最短距离的和 , 注意路是单向的. 因为点和边很多, 所以用dijkstra优先 ...
- poj 1511 Invitation Cards(dijstra优化)
题目链接:http://poj.org/problem?id=1511 题意:给出n个点和n条有向边,求所有点到源点1的来回最短路之和(保证每个点都可以往返源点1) 题目比较简单就是边和点的个数有点多 ...
- 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 / ...
- POJ 1511 Invitation Cards(单源最短路,优先队列优化的Dijkstra)
Invitation Cards Time Limit: 8000MS Memory Limit: 262144K Total Submissions: 16178 Accepted: 526 ...
- DIjkstra(反向边) POJ 3268 Silver Cow Party || POJ 1511 Invitation Cards
题目传送门 1 2 题意:有向图,所有点先走到x点,在从x点返回,问其中最大的某点最短路程 分析:对图正反都跑一次最短路,开两个数组记录x到其余点的距离,这样就能求出来的最短路以及回去的最短路. PO ...
- POJ 1511 Invitation Cards 链式前向星+spfa+反向建边
Invitation Cards Time Limit: 8000MS Memory Limit: 262144K Total Submissions: 27200 Accepted: 902 ...
- [POJ] 1511 Invitation Cards
Invitation Cards Time Limit: 8000MS Memory Limit: 262144K Total Submissions: 18198 Accepted: 596 ...
- poj 1511 Invitation Cards(最短路中等题)
In the age of television, not many people attend theater performances. Antique Comedians of Malidine ...
随机推荐
- WebGL 3D 电信机架实战之数据绑定
前言 在前端中,视图层和数据层需要进行单向或者双向数据绑定,大家都已经不陌生了,有时候 2D 做的比较顺了之后,就会想要挑战一下 3D,不然总觉得痒痒的.这个 3D 机架的 Demo 我觉得非常有代表 ...
- canvas---HTML5新特性
画圆及填充文字<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <ti ...
- JSON Web Token - 在Web应用间安全地传递信息
转载自:http://blog.leapoahead.com/2015/09/06/understanding-jwt/ JSON Web Token(JWT)是一个非常轻巧的规范.这个规范允许我们使 ...
- Jmeter----基本介绍(1)
1.Jmeter 基本介绍 简单的说,就是Jmeter能做 功能测试 和 性能测试 .它能够对HTTP和FTP服务器进行压力和性能测试, 也可以对任何数据库进行同样的测试,还能以多种形式展现测试结果. ...
- shiro权限框架(一)
不知不觉接触shiro安全框架都快三个月了,这中间配合项目开发踩过无数的坑.现在回想总结下,也算是一种积累,一种分享.中间有不够完美的地方或者不好的地方,希望大家指出来能一起交流.在这里谢谢开涛老师的 ...
- Lucene详解
一.lucene原理 Lucene 是apache软件基金会一个开放源代码的全文检索引擎工具包,是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎.它不是一个完整的搜索应用程序 ...
- java.lang.Object学习总结
- [poj3252]Round Numbers_数位dp
Round Numbers poj3252 题目大意:求一段区间内Round Numbers的个数. 注释:如果一个数的二进制表示中0的个数不少于1的个数,我们就说这个数是Round Number.给 ...
- Spring Boot 入门教程
Spring Boot 入门教程,包含且不仅限于使用Spring Boot构建API.使用Thymeleaf模板引擎以及Freemarker模板引擎渲染视图.使用MyBatis操作数据库等等.本教程示 ...
- [日常] NOIWC 2018爆零记
开个坑慢慢更(逃 (然而没准会坑掉?) day 0 大概 $8:30$ 就滚去雅礼了qwq 过去的时候发现并没有人...进报到处楼门的时候还被强行拍照围观了一波OwO 然后就领了HZ所有人的提包和狗牌 ...