POJ 1511 最短路spfa
题很简单 就是有向图中求给出的源点到其余所有点的最短路的和与其余所有点到源点的最短路之和
一开始以为dij对于正权图的单源最短路是最快的 写了一发邻接表的dij 结果超时 把所有的cin改成scanf 还是超时(过去并没有用cin的坏习惯..近两个星期才开始疯狂的使用cin..因为懒..)
后来想了一下 spfa也可以求单源最短路 就试着写了一发scanf 然后wa...看了半天题目 发现是有很大可能爆int的 改了后1800+msAC 用cin仍然超时
所以cin害人不浅 scanf大法好23333333
咨询了一下学长 学长给出来一个看似很有道理的解答:dij与bel都是直接在所有直接相连的点或者是所有直接相连的边里选最优 spfa是bell的优化 所以一定程度上也是对dij的优化 spfa讲道理是可以适合两个版本的
自己思考了一下 dij是耿直的尝试更新 spfa是如果可以松弛就放入队列 于是同一个点避开了多次的尝试作为终点更新 大概是这样吧...稀疏图应该是dij更快把..
至于为什么不写堆优化的dij呢?当然是我不会了23333333333333333333333
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<map>
#include<math.h>
#include<queue>
#include<iostream>
using namespace std;
int n,m;
int t1,t2;
struct node
{
int v;
long long w;
int nex;
};
node a[1000050];
node b[1000050];
int p1[1000050];
int p2[1000050];
void add1(int u,int v,long long w) /// real
{
a[t1].v=v;
a[t1].w=w;
a[t1].nex=p1[u];
p1[u]=t1;
t1++;
}
void add2(int u,int v,long long w) /// un
{
b[t2].v=v;
b[t2].w=w;
b[t2].nex=p2[u];
p2[u]=t2;
t2++;
}
long long dis1[1000050];
long long dis2[1000050];
bool vis[1000050];
void spfa1(){
queue<int >q;
q.push(1);
vis[1]=false;
while(!q.empty()){
int u=q.front();q.pop();
vis[u]=true;
for(int tt=p1[u];tt!=-1;tt=a[tt].nex)
{
int v=a[tt].v;
int w=a[tt].w;
if(dis1[u]+w<dis1[v])
{
dis1[v]=dis1[u]+w;
if(vis[v])
{
vis[v]=false;
q.push(v);
}
}
}
}
}
void spfa2(){
queue<int >q;
q.push(1);
vis[1]=false;
while(!q.empty()){
int u=q.front();q.pop();
vis[u]=true;
for(int tt=p2[u];tt!=-1;tt=b[tt].nex)
{
int v=b[tt].v;
int w=b[tt].w;
if(dis2[u]+w<dis2[v])
{
dis2[v]=dis2[u]+w;
if(vis[v])
{
vis[v]=false;
q.push(v);
}
}
}
}
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&m);
for(int i=1; i<=n; i++)
dis1[i]=dis2[i]=999999999999999;
dis1[1]=0;
dis2[1]=0;
for(int i=1; i<=n; i++)
vis[i]=true;
for(int i=1; i<=n; i++)
{
p1[i]=p2[i]=-1;
}
t1=t2=0;
for(int i=1; i<=m; i++)
{
int u,v;
long long w;
scanf("%d%d%I64d",&u,&v,&w);
add1(u,v,w);
add2(v,u,w);
}
spfa1();
for(int i=1; i<=n; i++)
vis[i]=true;
spfa2();
long long ans=0;
for(int i=2;i<=n;i++)
{
ans+=dis1[i];
ans+=dis2[i];
}
printf("%I64d\n",ans);
}
}
POJ 1511 最短路spfa的更多相关文章
- poj 1511 Invitation Cards spfa 邻接矩阵
题目链接: http://poj.org/problem?id=1511 题目大意: 这道题目比较难理解,我读了好长时间,最后还是在队友的帮助下理解了题意,大意就是,以一为起点,求从一到其他各点的最短 ...
- POJ 1511 Invitation Cards (spfa的邻接表)
Invitation Cards Time Limit : 16000/8000ms (Java/Other) Memory Limit : 524288/262144K (Java/Other) ...
- POJ - 1511 - 两次SPFA
这道题也算是一道模板题,但是第一次用优先队列迪杰斯特拉就T了.1e6的数据量,给了8s,网上其他题解中说要用SPFA. 题意:N个点的带权有向图.每次都从1出发,要到达其余没有被访问过的一个点(发传单 ...
- poj 3013 最短路SPFA算法
POJ_3013_最短路 Big Christmas Tree Time Limit: 3000MS Memory Limit: 131072K Total Submissions: 23630 ...
- Poj 1511 Invitation Cards(spfa)
Invitation Cards Time Limit: 8000MS Memory Limit: 262144K Total Submissions: 24460 Accepted: 8091 De ...
- POJ 3159 最短路 SPFA
#include<iostream> using namespace std; const int nMax = 30005; const int mMax = 150005; const ...
- It's not a Bug, It's a Feature! (poj 1482 最短路SPFA+隐式图+位运算)
Language: Default It's not a Bug, It's a Feature! Time Limit: 5000MS Memory Limit: 30000K Total Su ...
- DIjkstra(反向边) POJ 3268 Silver Cow Party || POJ 1511 Invitation Cards
题目传送门 1 2 题意:有向图,所有点先走到x点,在从x点返回,问其中最大的某点最短路程 分析:对图正反都跑一次最短路,开两个数组记录x到其余点的距离,这样就能求出来的最短路以及回去的最短路. PO ...
- HDU 1535 Invitation Cards (POJ 1511)
两次SPFA. 求 来 和 回 的最短路之和. 用Dijkstra+邻接矩阵确实好写+方便交换.可是这个有1000000个点.矩阵开不了. d1[]为 1~N 的最短路. 将全部边的 邻点 交换. d ...
随机推荐
- ecshop绕过验证码暴力破解
若验证码不匹配,并没有销毁当前验证码 所以就可以一次请求验证码图片后,只要不再刷新验证码就可以一直使用 1.获取正确的验证码 2. 1 2 3 4 5 6 7 8 9 10 11 12 13 ...
- hadoop中常见的问题
一.在root下进行格式化 这样很糟糕 这样的话,若是第一次装的话,我的建议是将生成的文件都删掉,恢复到最开始的状态, 1. 首先你需要删除 vi conf/hdfs-site.xml 配置文件的 ...
- SWFUpload上传大文件(暂时用用,真正用的时候还是要改的)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- Spark编译安装和运行
一.环境说明 Mac OSX Java 1.7.0_71 Spark 二.编译安装 tar -zxvf spark-.tgz cd spark- ./sbt/sbt assembly ps:如果之前执 ...
- 电赛总结(二)——AD芯片总结之音频处理芯片ADC8009
一.特性参数 1.专门用来用音频处理的AD芯片 2.内部固定好8K的采样速率 3.8位AD芯片 二.内部结构图 三.芯片管脚图 四.管脚功能说明 管脚名称 功能 IN0~IN7 数据输入端 ABC 数 ...
- PHP 5.4 中经 htmlspecialchars 转义后的中文字符串为空,DeDeCMS在PHP5.4下编辑器中文不显示问题
在加入 发布招聘功能的时候,出现问题了,就是修改招聘信息的时候.编辑器内容不显示,只显示英文,中文不显示,以前记得开发此功能没这问题啊!然后各种原因找不出,没办法,从编辑器函数入手,一步一步查,查到 ...
- Hark的数据结构与算法练习之若领图排序ProxymapSort
算法说明 若领图排序是分布排序的一种. 个人理解,若领图排序算是桶排序+计数排序的变异版,桶排序计数排序理解了,那么若领图排序理解起来就会比较容易.区别其实就是存储中间值的方式做了调整…… 话说,这个 ...
- C# 通用上传文件类
1.Upfile.aspx: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="U ...
- JVM的类加载机制
虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制. 类加载的过程: 包括加载.链接(含验证.准备 ...
- HTML-Canvas02
文字对齐方式 : 水平对齐 //是用 textAlign 属性设置水平对齐方式(默认坐标点) ctx.textAlign = "start"; ctx.font = "3 ...