2边SPFA 然后求和

#include<stdio.h>
#include<string.h>
#include<queue>
#define INF 1000000000
#define ii __int64
using namespace std;
struct node
{
ii v;
ii val;
ii next;
}edge1[],edge2[];
ii head1[],dis1[],head2[],dis2[],vis[];
ii n,m,t,index1,index2;
void add1(ii x,ii y,ii z)
{
ii i,j;
edge1[index1].v=y;
edge1[index1].val=z;
edge1[index1].next=head1[x];
head1[x]=index1++;
}
void add2(ii x,ii y,ii z)
{
ii i,j;
edge2[index2].v=y;
edge2[index2].val=z;
edge2[index2].next=head2[x];
head2[x]=index2++;
}
void SPFA1(ii u)
{
ii i,j;
memset(vis,,sizeof(vis));
queue<ii>q;
for(i=;i<=n;i++)
dis1[i]=INF;
dis1[u]=;
vis[u]=;
q.push(u);
while(!q.empty())
{
ii v=q.front();
q.pop();
vis[v]=;
for(i=head1[v];i!=-;i=edge1[i].next)
{
ii tmp=edge1[i].v;
if(dis1[tmp]>dis1[v]+edge1[i].val)
{
dis1[tmp]=dis1[v]+edge1[i].val;
if(!vis[tmp])
{
q.push(tmp);
vis[tmp]=;
}
}
}
}
}
void SPFA2(ii u)
{
ii i,j;
memset(vis,,sizeof(vis));
queue<ii>q;
for(i=;i<=n;i++)
dis2[i]=INF;
dis2[u]=;
vis[u]=;
q.push(u);
while(!q.empty())
{
ii v=q.front();
q.pop();
vis[v]=;
for(i=head2[v];i!=-;i=edge2[i].next)
{
ii tmp=edge2[i].v;
if(dis2[tmp]>dis2[v]+edge2[i].val)
{
dis2[tmp]=dis2[v]+edge2[i].val;
if(!vis[tmp])
{
q.push(tmp);
vis[tmp]=;
}
}
}
}
}
int main()
{
ii i,j,t,m;
scanf("%I64d",&t);
while(t--)
{
scanf("%I64d%I64d",&n,&m);
index1=index2=;
memset(dis1,,sizeof(dis1));
memset(head1,-,sizeof(head1));
memset(dis2,,sizeof(dis2));
memset(head2,-,sizeof(head2));
for(i=;i<m;i++)
{
ii x,y,z;
scanf("%I64d%I64d%I64d",&x,&y,&z);
add1(x,y,z);
add2(y,x,z);
} SPFA1(); /*for(i=1;i<=n;i++)
printf("%d ",dis1[i]);
printf("\n");*/ SPFA2(); /*for(i=1;i<=n;i++)
printf("%d ",dis2[i]);printf("\n");*/ ii ans=;
for(i=;i<=n;i++)
{
ans+=dis1[i]+dis2[i];
}
printf("%I64d\n",ans);
}
}

hdu1535 SPFA的更多相关文章

  1. 最短路径算法之四——SPFA算法

    SPAF算法 求单源最短路的SPFA算法的全称是:Shortest Path Faster Algorithm,该算法是西南交通大学段凡丁于1994年发表的. 它可以在O(kE)的时间复杂度内求出源点 ...

  2. 【BZOJ-3627】路径规划 分层图 + Dijkstra + spfa

    3627: [JLOI2014]路径规划 Time Limit: 30 Sec  Memory Limit: 128 MBSubmit: 186  Solved: 70[Submit][Status] ...

  3. POJ 2387 Til the Cows Come Home(最短路 Dijkstra/spfa)

    传送门 Til the Cows Come Home Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 46727   Acce ...

  4. sgu 240 Runaway (spfa)

    题意:N点M边的无向图,边上有线性不下降的温度,给固定入口S,有E个出口.逃出去,使最大承受温度最小.输出该温度,若该温度超过H,输出-1. 羞涩的题意 显然N*H的复杂度dp[n][h]表示到达n最 ...

  5. spfa模板

    通过stl的queue实现的spfa(vector实现邻接表存图) 本模板没有考虑存在两点不连通的情况 如果需要判断则需要用到并查集或者遍历整个邻接表 #include<iostream> ...

  6. SPFA

    SPFA算法用来求单源最短路.可以处理任何有解的情况. 先建一个数组\(dist_x = 起点到x的最短路长度\),当\(x=起点\)时为0,当x和起点不通时为INF(本题中为\(2^31-1\)). ...

  7. BZOJ2763 [JLOI2011]飞行路线(SPFA + DP)

    题目 Source http://www.lydsy.com/JudgeOnline/problem.php?id=2763 Description Alice和Bob现在要乘飞机旅行,他们选择了一家 ...

  8. bzoj3380: [Usaco2004 Open]Cave Cows 1 洞穴里的牛之一(spfa+状压DP)

    数据最多14个有宝藏的地方,所以可以想到用状压dp 可以先预处理出每个i到j的路径中最小权值的最大值dis[i][j] 本来想用Floyd写,无奈太弱调不出来..后来改用spfa 然后进行dp,这基本 ...

  9. bzoj 1179[Apio2009]Atm (tarjan+spfa)

    题目 输入 第一行包含两个整数N.M.N表示路口的个数,M表示道路条数.接下来M行,每行两个整数,这两个整数都在1到N之间,第i+1行的两个整数表示第i条道路的起点和终点的路口编号.接下来N行,每行一 ...

随机推荐

  1. 【读书笔记《Android游戏编程之从零开始》】3.Android 游戏开发常用的系统控件(Button、Layout、ImageButton)

    3.1 Button Button这控件不用多说,就是一个按钮,主要是点击后进行相应事件的响应. 给组件添加ID属性:定义格式为 android:id="@+id/name",这里 ...

  2. poj 1463 Strategic game DP

    题目地址:http://poj.org/problem?id=1463 题目: Strategic game Time Limit: 2000MS   Memory Limit: 10000K Tot ...

  3. hdu-5495 LCS(置换)

    题目链接: LCS Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total S ...

  4. AutoIT删除Internet临时文件

    搜集了几个超赞的方法: 1.删除临时文件 Temporary Internet Files:RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 8 2. 删 ...

  5. 09Mybatis_入门程序——删除用户以及更新用户

    删除用户: 还是前面的的案例,别的都不改,就修改两处地方.1.user.xml文件以及2.Mybatis_first.java文件 user.xml文件代码修改如下: <?xml version ...

  6. mac上一键配置和安装adb驱动或者环境

    最近才使用的mac,老实说mac上要配置adb的环境不那么复杂,但是还是会让一些心不细或者动手能力不强的同学望而却步.那么到底有没有一个一键完成mac上adb和fastboot环境搭配的软件或者脚本呢 ...

  7. Elasticsearch 相关名词理解

    Cluster包含多个node,Indices不应该理解成动词索引,Indices可理解成关系数据库中的databases,Indices可包含多个Index,Index对应关系数据库中的databa ...

  8. 二叉树的遍历(递归,迭代,Morris遍历)

    二叉树的遍历: 先序,中序,后序: 二叉树的遍历有三种常见的方法, 最简单的实现就是递归调用, 另外就是飞递归的迭代调用, 最后还有O(1)空间的morris遍历: 二叉树的结构定义: struct ...

  9. C语言操作符优先级

    C语言操作符优先级 优先级 运算符 含    义 要求运算 对象的个数 结合方向 1 () [] -> . 圆括号 下标运算符 指向结构体成员运算符 结构体成员运算符 自左至右 2 ! 逻辑非运 ...

  10. Linux下目录的合并以及文件的覆盖

    有两个目录test和new,test目录下有目录和文件,new目录下有更改过的一些test下的目录和文件,以及一些新增的文件,现在对两个目录进行合并以及覆盖test下的旧文件. cp -frap ne ...