原题目: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. 发任务找不到test-unit报错

    发任务的时候因找不到gem包test-unit报错, 出错行: require 'test/unit' require 'test/unit/testresult' 解决办法如下 1.通过命令查看ge ...

  2. ConfigureAwait(false)

    昨天在做项目的时候,用的dapper查数据用的QueryAsync 异步方法.给上级做代码审核时,上级说最好加上ConfigureAwait(false).能减少一些性能开销. 因为之前没用过所以看了 ...

  3. Spring装配各种类型bean

    一.单属性值的装配 //setter注入,提供无参构造器,提供setXX方法 <property name="" value=""></pro ...

  4. Anaconda 安装教程(Win10环境) Tensorflow安装

    序 Python易用,但用好却不易,其中比较头疼的就是包管理和Python不同版本的问题,特别是当你使用Windows的时候.为了解决这些问题,有不少发行版的Python,比如WinPython.An ...

  5. 探索Web Office Apps服务

    老样子,先放几个官链: WOA部署规划:http://technet.microsoft.com/zh-cn/library/jj219435(v=office.15).aspx 拓扑规划:http: ...

  6. new与delete,malloc与free

    1.new_delete与malloc_free ❶malloc/free: malloc原型: void *malloc(long NumBytes) 该函数分配了NumBytes个字节,并返回了指 ...

  7. PROCEDURE存储过程传入表参数

    ) ,itemNum ) ,itemQty )) ---2.创建一个存储过程以表值参数作为输入 alter proc usp_TestProcWithTable     @tb  LocationTa ...

  8. python3-list列表增删改查合并排序

    # Auther: Aaron Fan names = ["aaron", "alex", "james", "meihengfa ...

  9. python常用uuid模块

    uuid.uuid4(),会根据我们当前的网卡和时间生成的一个随机字符串. 注意:uuid.uuid4()生成的是一个对象,需要强转为字符串. uid = str(uuid.uuid4()) #当前网 ...

  10. spring第三篇

    在昨天下午更新sprin第二篇中,叙述了将对象交给spring创建和管理,今天在spring第三篇中,主要写两个点一是spring的思想 二是spring中bean元素的属性配置. 1 spring思 ...