Invitation Cards---poj1511(spfa)
题目链接:http://poj.org/problem?id=1511
有向图有n个点m条边,求点1到其他n-1个点的最短距离和+其他点到点1的最小距离和;
和poj3268一样,但是本题的数据范围较大,只能用spfa+邻接表写,不能用vector;
两个spfa即可;
#include <iostream>
#include <stdio.h>
#include <math.h>
#include <string.h>
#include <queue>
#include <algorithm>
#include <map>
#include <string>
typedef long long LL;
///#define INF 0x3f3f3f3f
#define INF 100000000000000
#define N 1000100 using namespace std; struct node
{
int v;
LL w;
node(){};
node(int v, LL w):v(v),w(w){}
}; vector<node > G[N];
vector<node > G1[N]; int vis[N], n, m;
LL dist[N]; LL spfa1(int s)
{
for(int i=; i<=n; i++)
dist[i] = INF;
dist[s] = ;
queue<int> Q;
Q.push(s);
memset(vis, , sizeof(vis));
vis[s] = ;
while(!Q.empty())
{
int p = Q.front(); Q.pop();
vis[p] = ;
for(int i=, len=G[p].size(); i<len; i++)
{
node q = G[p][i];
if(dist[q.v] > dist[p] + q.w)
{
dist[q.v] = dist[p] + q.w;
if(!vis[q.v])
{
vis[q.v] = ;
Q.push(q.v);
}
}
}
}
LL ans = ;
for(int i=; i<=n; i++)
ans += dist[i];
return ans;
} LL spfa2(int s)
{
queue<int>Q;
for(int i=; i<=n; i++)
dist[i] = INF;
memset(vis, , sizeof(vis));
vis[s] = ;
dist[s] = ;
Q.push(s);
while(!Q.empty())
{
int p = Q.front(); Q.pop();
vis[p] = ;
for(int i=, len=G1[p].size(); i<len; i++)
{
node q = G1[p][i];
if(dist[q.v] > dist[p] + q.w)
{
dist[q.v] = dist[p] + q.w;
if(!vis[q.v])
{
vis[q.v] = ;
Q.push(q.v);
}
}
}
}
LL ans = ;
for(int i=; i<=n; i++)
ans += dist[i];
return ans;
} int main()
{
int T;
scanf("%d", &T);
while(T--)
{
scanf("%d %d", &n, &m);
for(int i=; i<=n; i++)
{
G[i].clear();
G1[i].clear();
}
for(int i=; i<=m; i++)
{
int u, v; LL w;
scanf("%d %d %I64d", &u, &v, &w);
G[u].push_back(node(v, w));
G1[v].push_back(node(u, w));
}
LL ans = spfa1();
ans += spfa2();
printf("%I64d\n", ans);
}
return ;
}
Invitation Cards---poj1511(spfa)的更多相关文章
- 模板C++ 03图论算法 1最短路之单源最短路(SPFA)
3.1最短路之单源最短路(SPFA) 松弛:常听人说松弛,一直不懂,后来明白其实就是更新某点到源点最短距离. 邻接表:表示与一个点联通的所有路. 如果从一个点沿着某条路径出发,又回到了自己,而且所经过 ...
- hdu 1535 Invitation Cards(spfa)
Invitation Cards Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others ...
- POJ1511 Invitation Cards —— 最短路spfa
题目链接:http://poj.org/problem?id=1511 Invitation Cards Time Limit: 8000MS Memory Limit: 262144K Tota ...
- Invitation Cards POJ-1511 (spfa)
题目链接:Invitation Cards 题意: 给出一张有向图,现在要求从1到其他所有的结点的最小路径和与从所有其他结点到1的最小路径和之和. 题解: 求最小路径可以用SPFA来求解.从1到其他结 ...
- 最短路(SPFA)
SPFA是Bellman-Ford算法的一种队列实现,减少了不必要的冗余计算. 主要思想是: 初始时将起点加入队列.每次从队列中取出一个元素,并对所有与它相邻的点进行修改,若某个相邻的点修改成功,则将 ...
- Bellman-Ford算法及其队列优化(SPFA)
一.算法概述 Bellman-Ford算法解决的是一般情况下的单源最短路径问题.所谓单源最短路径问题:给定一个图G=(V,E),我们希望找到从给定源结点s属于V到每个结点v属于V的最短路径.单源最短路 ...
- sgu 240 Runaway (spfa)
题意:N点M边的无向图,边上有线性不下降的温度,给固定入口S,有E个出口.逃出去,使最大承受温度最小.输出该温度,若该温度超过H,输出-1. 羞涩的题意 显然N*H的复杂度dp[n][h]表示到达n最 ...
- codevs 1021 玛丽卡(spfa)
题目描述 Description 麦克找了个新女朋友,玛丽卡对他非常恼火并伺机报复. 因为她和他们不住在同一个城市,因此她开始准备她的长途旅行. 在这个国家中每两个城市之间最多只有一条路相通,并且我们 ...
- 【POJ】1062 昂贵的聘礼(spfa)
http://poj.org/problem?id=1062 此题一开始果断想到暴力.. 但是n<=100果断不行. 一看题解,噗!最短路... 构图很巧妙. 每一个物品对应的所需物品相当于一个 ...
随机推荐
- HDU 1180 (BFS搜索)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1180 题目大意:迷宫中有一堆楼梯,楼梯横竖变化.这些楼梯在奇数时间会变成相反状态,通过楼梯会顺便到达 ...
- Designing CSS Layouts With Flexbox Is As Easy As Pie
This article is an updated excerpt of the chapter “Restyle, Recode, Reimagine With CSS3″ from our Sm ...
- vim 配置 设置搜索 高亮
1.可以修改配置文件在~/.vimrc 文件中添加一行 set hlsearch 2.也可以直接在当前编辑环境里使用:在当前环境中执行如下命令 :set hlsearch 作者:风波 mail:fen ...
- VTK 6.3.0 Qt 5.4 MinGW 4.9.1 Configuration 配置
Download VTK 6.3.0 Download Qt 5.4 with MinGW 4.9.1 Download CMake 3.2.0 I assume you've already ins ...
- $_ 与 $PSItem
PowerShell 3.0 中的$PSItem 此文章于2012年11月4日发表在PowershellPowershell小技巧并加以Powershell 3.0管道的标签 by Mooser Le ...
- [转]Jquery通用开源框架之【ejq.js】
ejq是一款非常小巧的JS工具库,未压缩才50K,在jquery的基础上对jquery缺失部分作了很好的弥补作用. 优点: 1.具有内置的模板解析引擎语法和angularjs相近减少学习成本 2.能够 ...
- ucos
优先级反转:有信号量的时候,不同任务共用一个信号量,如果信号量没释放就可能出现优先级反转. μC/OS-Ⅱ支持的处理器的堆栈既可以从上(高地址)往下(低地址)递减也可以从下往上递增.用户在调用OSTa ...
- iOS中利用CoreTelephony获取用户当前网络状态(判断2G,3G,4G)
前言: 在项目开发当中,往往需要利用网络.而用户的网络环境也需要我们开发者去注意,根据不同的网络状态作相应的优化,以提升用户体验. 但通常我们只会判断用户是在WIFI还是移动数据,而实际上,移动数据也 ...
- PHP数组常用函数分类整理
一.数组操作的基本函数数组的键名和值array_values($arr); 获得数组的值array_keys($arr); 获得数组的键名array_flip($arr); 数组中的值与键名互换 ...
- ThinkPad告别蓝快,自己使用VHD安 WIN8.1并成功激活
写在前面:本文WIN8.1激活适合于中国大陆地区国行预装WIN8系统(bios写入WIN8授权)是可激活的,享受正版WIN8系统(同样可以安装WIN8.1系统).比如联想的Y400.Y500.Y480 ...