原题目:http://poj.org/problem?id=1511

给出一个有向图,求出这个图从1到所有点的最短路径和所有点到1的最短路径的和。

这题数据量有点大,数据范围也大,所以用SPFA+邻接表做。

各种限制:Time Limit: 8000MS    Memory Limit: 262144K(折腾评测机概念啊)

输入没什么处理的,注意在求所有点到1最短路径和的思想,嫑一看每个点都要是源点Floyd去了。。你想想,只要你把有向图所有箭头改一个方向,不又是从1到所有点的最短路径了么!?

废话不多说,贴代码!C++

这里我用了两个命名空间来防止重复,内容其实是一模一样的,(那我XX啊,直接一个类两个实例不就得了啊!不过这么写了就写了吧)用的STL的容器队列,SPFA,数组邻接表,会点SPFA都能看懂吧。好像是两秒多AC的,内存也不大。

因为数据范围太大,我们就用long long做的,不过为了省内存,我把不需要long long的地方都没有long long(我一同学除了_N用的int别的都用的long long,内存比我多)

//Accepted
#include <iostream>
#include <stdio.h>
#include <cstring>
#include <queue>
using namespace std; const int MAXN=1000000+10;
struct Edge
{
int v,w,next;
};
int m,n;
namespace sp1
{
Edge a[MAXN];
int link[MAXN];
bool visit[MAXN];
long long d[MAXN];
queue<int> q;
void memoryset()
{
memset(a,0,sizeof(a));
memset(link,0,sizeof(link));
memset(visit,0,sizeof(visit));
memset(d,0x3f,sizeof(d));
}
void add(int u,int v,int w)
{
static int tmp=1;
a[tmp].v=v;
a[tmp].w=w;
a[tmp].next=link[u];
link[u]=tmp;
tmp++;
}
void spfa()
{
q.push(1);
visit[1]=true;
d[1]=0;
while(!q.empty())
{
int x=q.front();
q.pop();
visit[x]=false;
for(int i=link[x];i!=0;i=a[i].next)
{
if(d[x]+a[i].w<d[a[i].v])
{
d[a[i].v]=d[x]+a[i].w;
if(visit[a[i].v]==false)
{
q.push(a[i].v);
visit[a[i].v]=true;
}
}
}
}
}
};
namespace sp2
{
Edge a[MAXN];
int link[MAXN];
bool visit[MAXN];
long long d[MAXN];
queue<int> q;
void memoryset()
{
memset(a,0,sizeof(a));
memset(link,0,sizeof(link));
memset(visit,0,sizeof(visit));
memset(d,0x3f,sizeof(d));
}
void add(int u,int v,int w)
{
static int tmp=1;
a[tmp].v=v;
a[tmp].w=w;
a[tmp].next=link[u];
link[u]=tmp;
tmp++;
}
void spfa()
{
q.push(1);
visit[1]=true;
d[1]=0;
while(!q.empty())
{
int x=q.front();
q.pop();
visit[x]=false;
for(int i=link[x];i!=0;i=a[i].next)
{
if(d[x]+a[i].w<d[a[i].v])
{
d[a[i].v]=d[x]+a[i].w;
if(visit[a[i].v]==false)
{
q.push(a[i].v);
visit[a[i].v]=true;
}
}
}
}
}
};
int main()
{
int _N;
scanf("%d",&_N);
while(_N--)
{ scanf("%d%d",&n,&m);
sp1::memoryset();
sp2::memoryset();
for(int i=1;i<=m;i++)
{
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
sp1::add(a,b,c);
sp2::add(b,a,c);
}
sp1::spfa();
sp2::spfa();
long long ans=0;
for(int i=1;i<=n;i++)
ans+=sp1::d[i];
for(int i=1;i<=n;i++)
ans+=sp2::d[i];
cout << ans << endl;
}
}

//以下是6月7号补充

我写了俩一模一样代码,注意是一模一样。。(猛的拍头)你不用一个类来封装啊!于是因为我懒就不写代码啦。。自己测了一下,一个SP的实例大小为25000296Bytes。。所以大家写的时候必须把SP的实例放全局,否则爆栈,否则爆栈,否则爆栈,否则爆栈,否则爆栈。。。

POJ1511 Invitation Cards SPFA算法裸题变形的更多相关文章

  1. poj1511/zoj2008 Invitation Cards(最短路模板题)

    转载请注明出处: http://www.cnblogs.com/fraud/          ——by fraud Invitation Cards Time Limit: 5 Seconds    ...

  2. POJ1511 Invitation Cards —— 最短路spfa

    题目链接:http://poj.org/problem?id=1511 Invitation Cards Time Limit: 8000MS   Memory Limit: 262144K Tota ...

  3. POJ-1511 Invitation Cards( 最短路,spfa )

    题目链接:http://poj.org/problem?id=1511 Description In the age of television, not many people attend the ...

  4. POJ 1511 Invitation Cards (spfa的邻接表)

    Invitation Cards Time Limit : 16000/8000ms (Java/Other)   Memory Limit : 524288/262144K (Java/Other) ...

  5. hdu 1535 Invitation Cards(SPFA)

    Invitation Cards Time Limit : 10000/5000ms (Java/Other)   Memory Limit : 65536/65536K (Java/Other) T ...

  6. POJ-1511 Invitation Cards (双向单源最短路)

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

  7. Poj 1511 Invitation Cards(spfa)

    Invitation Cards Time Limit: 8000MS Memory Limit: 262144K Total Submissions: 24460 Accepted: 8091 De ...

  8. BZOJ 3680: 吊打XXX【模拟退火算法裸题学习,爬山算法学习】

    3680: 吊打XXX Time Limit: 10 Sec  Memory Limit: 128 MBSec  Special JudgeSubmit: 3192  Solved: 1198[Sub ...

  9. POJ1511:Invitation Cards(最短路)

    Invitation Cards Time Limit: 8000MS   Memory Limit: 262144K Total Submissions: 34743   Accepted: 114 ...

随机推荐

  1. VxVM vxsnap ERROR V-5-1-0 Volume cannot be linked due to size/regionsize incompatibility

    在做vxsnap addmir时报错如下: #> vxsnap -g OLS_DATA_DG -b addmir OLS_DATA_ACC_P mirvol=OLS_DATA_ACC_SM1 V ...

  2. SqlServer——用户自定义函数

    在SQL Server中,用户不仅可以使用标准的内置函数,也可以使用自己定义的函数来实现一些特殊的功能.可以使用CREATE  FUNCTION 语句创建.在创建时需要注意:函数名在数据库中必须唯一, ...

  3. 使用GSON来生成JSON数据

    第二种方法: 当不需要显示某个属性时,在不需要显示出的属性前加transient关键字即可满足 使用gson来解析 使用gson解析 带日期转换 集合类解析:gson中的数组与java中集合类都是对应 ...

  4. springmvc 处理器方法返回的是string 重定向到处理器方法

  5. myeclipse.ini

    myeclipse10 32位 我的配置 #utf8 (do not remove) #utf8 (do not remove) -startup ../Common/plugins/org.ecli ...

  6. LINUX oracle dbca无法启动

    LINUX操作系统中执行DBCA无法启动 方法:执行以下命令后再执行DBCA xhost +

  7. 图片缓存核心类LruCache

    该类类似一个缓存池,具体可参考 http://www.fengfly.com/plus/view-214546-2.html

  8. 【总结整理】行内标签span设置position:absolute/float属性可以设置宽度与高度

    postion:absolute 跳出文本流,不是行内元素,设置宽高有效,我的理解. 引用下曹刘阳写的<编写高质量代码-web前端开发修炼之道>一书中看到的一句话:position:abs ...

  9. 学习Javascript的书籍(转)

    学习Javascript的书籍   作者: 阮一峰 日期: 2008年1月 9日 昨天,ppip同学留言: 你的js主要是用什么材料学的?推荐用哪本教程呢? 我想了一下,发现自己还真的读过不少书.我在 ...

  10. Apollo问题

    1.安装问题: 一不小心安装了NVIDIA,导致bash docker/scripts/dev_start.sh无法启动:[ERROR] Failed to start docker containe ...