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 ...
随机推荐
- 分布式事务的典型处理方式:2PC、TCC、异步确保和最大努力型
1. 柔性事务和刚性事务 柔性事务满足BASE理论(基本可用,最终一致)刚性事务满足ACID理论 本文主要围绕分布式事务当中的柔性事务的处理方式进行讨论. 柔性事务分为 两阶段型 补偿型 异步确保型 ...
- Redis set集合结构及命令详解
set 无序集合 集合的性质: 唯一性,无序性,确定性 注: 在string和link的命令中,可以通过range 来访问string中的某几个字符或某几个元素 但,因为集合的无序性,无法通过下标或范 ...
- vue/axios请求拦截
import axios from 'axios';import { Message } from 'element-ui';import Cookies from 'js-cookie';impor ...
- java开发常用技术
基础部分 1. 线程和进程的区别 线程三个基本状态:就绪.执行.阻塞 线程五个基本操作:创建.就绪.运行.阻塞.终止 进程四种形式:主从式.会话式.消息或邮箱机制.共享存储区方式 进程是具有一定功能的 ...
- 修改GeoJson的网址
http://geojson.io 可以打开自己的json 然后修改
- C语言博客作业—函数嵌套调用
一.实验作业 1.1 PTA题目:递归法对任意10个数据按降序排序 1.1.1设计思路 void sort(int a[],int n) { 定义整型循环变量i,中间变量temp,最小值min: 令m ...
- c# gridview 新增行
string[] newRow = {"long","d","b"}; Gridview.Rows.Insert(Gridview.Rows ...
- [2]十道算法题【Java实现】
前言 清明不小心就拖了两天没更了-- 这是十道算法题的第二篇了-上一篇回顾:十道简单算法题 最近在回顾以前使用C写过的数据结构和算法的东西,发现自己的算法和数据结构是真的薄弱,现在用Java改写一下, ...
- AutoCAD中的扩展字典及扩展记录(C#)
在学习CAD扩展记录的过程中,遇到了一些问题,也积累了一些经验,现在给大家分享一些我的学习心得.在学习扩展字典之前需要读者了解cad的组码,也就是DxfCode.感兴趣的也可以了解一下扩展数据的相关内 ...
- spring MVC中定义异常页面
如果我们在使用Spring MVC的过程中,想自定义异常页面的话,我们可以使用DispatcherServlet来指定异常页面,具体的做法很简单: 下面看我曾经的一个项目的spring配置文件: 1 ...