1218: 奇奇与变形金刚

Time Limit: 3 Sec  Memory Limit: 128 MB
Submit:
130  Solved: 37
[Submit][Status][Web
Board
]

Description

奇奇 gigi
 
 
奇奇口头禅:别人的失败就是我的快乐!
星座:处女座
生日:8月25日
血型:不明
年龄:2岁
生肖:鸡
身高:120公分
体重:149公斤
 
职业:机器人
兴趣:周游世界
宠物:变形金刚
最喜欢:充电
最讨厌:拔掉它的电源插头
偶像:科学怪人
语言:中文
 
大眼睛,圆滚滚的合金身躯,灵活的脑袋可以旋转180度,是由科学怪人制造出来的超级机器人,通过电力补充能源,通过各种数据的测试表明,它几乎继承了科学怪人的所有优点,而且同样痴迷于科学研究。后来没想到科学怪人破产,只好忍痛把它卖给有钱的富翁做宠物机器人。但是奇奇并不甘心永远做有钱人的宠物,他希望赚到足够的钱赎回自己,继续它心爱的科学研究事业。
 
虽然是科学怪人所制造的,但脑部功能却稳定很多,不会发生心智丧失的BUG,而且不象科学怪人那样狂妄自大且有自恋癖,所以在大富翁世界要比科学怪人受欢迎的多。只是偶尔喜欢恶作剧,例如当夜晚的班车上突然前排有人把脑袋旋转180度朝你拌鬼脸时,千万别被吓死,那一定就是它了,一个喜欢恶作剧的机器人。
 
奇奇的偶像科学怪人今日过生日了,他要赶去为他庆生。这样他就出门了,在去的途中发现礼物忘家里了,他必须回去取。虽然奇奇是个机器人,但脑子总是在着急的时候不好使了。这样他找来了你帮忙,他把地图里的数据给了你,你来帮帮他计算奇奇回到家去完礼物再赶去科学怪人的家的最短路程是多少~

Input

T<=10代表测试数据个数
每组测试数据第一行两个正整数N,M
N<=10000代表节点个数
M<=50000代表边的个数
然后是M行,每行三个整数U,V,W
1<=U<=N,1<=V<=N代表从U到V有一条长度为1<=W<=1e7的边(单向的)
然后是三个整数A,B,C
1<=A<=N,代表奇奇现在所处的位置
1<=B<=N,代表奇奇家所在的位置
1<=C<=N,代表科学怪人的家所在的位置

Output

输出奇奇要走的最短路程,数据保证一定有解,每组输出占一行

Sample Input

1 4 5 1 2 5 2 1 10 2 3 1 2 4 3 4 1 1 2
1 3

Sample Output

10
 

Mean:

analyse:

两次spfa,相加即得answer。

Time complexity:O(m*e)

Source code:

//Memory   Time
// 2556K 362MS
// by : Snarl_jsb
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<vector>
#include<queue>
#include<stack>
#include<iomanip>
#include<string>
#include<climits>
#include<cmath>
#define MAXV 10010
#define MAXE 50010
#define LL long long
using namespace std;
int T,n,m,u,v,w;
int now,home,goal;
bool vis[MAXV];
LL dis[MAXV];
namespace Adj
{
struct Node
{
int to,next,w;
bool flag;
} edge[MAXE];
int top,head[MAXV];
void init()
{
top=1;
memset(head,0,sizeof(head));
}
void addEdge(int u,int v,int w)
{
edge[top].to=v;
edge[top].w=w;
edge[top].flag=1;
edge[top].next=head[u];
head[u]=top++;
}
}
using namespace Adj;
LL spfa(int sta,int en)
{
for(int i=1;i<=n;i++)
{
vis[i]=0;
dis[i]=LLONG_MAX;
}
queue<int>Q;
Q.push(sta);
vis[sta]=1;
dis[sta]=0;
while(!Q.empty())
{
int now=Q.front();
Q.pop();
vis[now]=0;
for(int i=head[now];i;i=edge[i].next)
{
int w=edge[i].w;
int son=edge[i].to;
if(dis[now]+w<dis[son])
{
dis[son]=dis[now]+w;
if(!vis[son])
{
Q.push(son);
vis[son]=1;
}
}
}
}
return dis[en];
} void scan(int &x)
{
char c=getchar();
x=0;
while(!(c>='0'&&c<='9')) c=getchar();
while(c>='0'&&c<='9')
{
x=x*10+c-'0';
c=getchar();
}
} int main()
{
scan(T);
while(T--)
{
Adj::init();
scan(n);
scan(m);
while(m--)
{
scan(u);
scan(v);
scan(w);
addEdge(u,v,w);
}
scan(now);
scan(home);
scan(goal);
LL ans=spfa(now,home);
ans+=spfa(home,goal);
cout<<ans<<endl;
}
return 0;
}

  

图论 --- spfa + 链式向前星 (模板题) dlut 1218 : 奇奇与变形金刚的更多相关文章

  1. 图论 ---- spfa + 链式向前星 ---- poj 3268 : Silver Cow Party

    Silver Cow Party Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 12674   Accepted: 5651 ...

  2. 图论 --- spfa + 链式向前星 : 判断是否存在正权回路 poj 1860 : Currency Exchange

    Currency Exchange Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 19881   Accepted: 711 ...

  3. 【bfs+链式向前星】防御僵尸(defend)计蒜客 - 45288

    题目: A 国有 n 座城市,n−1 条双向道路将这些城市连接了起来,任何两个城市都可以通过道路互通. 某日,A 国爆发了丧尸危机,所有的幸存者现在都聚集到了 A 国的首都(首都是编号为 1 的城市) ...

  4. Tarjan模版(链式向前星表示方法)

    这道模版用到了链式向前星表示法: struct node { int v,next; }edge[]; void add(int x,int y) { edge[++cnt].next=heads[x ...

  5. 【数据结构】链式向前星知识点&代码

    代码: struct NODE{ int to; int nxt; int c; }node[MM];//链式向前星 ; void add(int a,int b,int c){ node[lcnt] ...

  6. UESTC30-最短路-Floyd最短路、spfa+链式前向星建图

    最短路 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) 在每年的校赛里,所有进入决赛的同 ...

  7. UESTC 30.最短路-最短路(Floyd or Spfa(链式前向星存图))

    最短路 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) 在每年的校赛里,所有进入决赛的同 ...

  8. SPFA + 链式前向星(详解)

    求最短路是图论中最基础的算法,最短路算法挺多,本文介绍SPFA算法. 关于其他最短路算法,请看我另一篇博客最短路算法详解 链式前向星概念 简单的说,就是存储图的一个数据结构.它是按照边来存图,而邻接矩 ...

  9. spfa+链式前向星模板

    #include<bits/stdc++.h> #define inf 1<<30 using namespace std; struct Edge{ int nex,to,w ...

随机推荐

  1. 目前流行的源程序版本管理软件和项目管理软件都有哪些?各有什么优缺点?以及Github的注册过程

    一.目前流行的源程序版本管理软件和项目管理软件有Microsoft TFS.GitHub.SVN.Coding等. 二.各有什么优缺点 三.在GitHub注册账户的过程 Microsoft TFS的优 ...

  2. C#Lite Unity热更新开源解决方案改名C#Light

    因为此脚本语言与C#Lite Framework 开源项目重名,故修改名称,发音不变.

  3. Win + D 和 Win + M的区别

    在Windows系统上,Win + D是显示桌面,Win + M是最小化所有窗口,咋一看,这两个快捷键貌似没有区别,但是在某些方面还是有细微的区别. 威力 从威力上来说,Win + D更牛逼一,因为显 ...

  4. 使用CSS sprites减少HTTP请求

    sprites是鬼怪,小妖精,调皮鬼的意思,初听这个高端洋气的名字我被震慑住了,一步步掀开其面纱后发觉很简单的东西,作用却很大 神马是CSS 小妖精 CSS sprites是指把网页中很多小图片(很多 ...

  5. Git学习笔记(1)——安装,配置,创建库,文件添加到库

    初次接触git,为了记忆深刻,把学习的简单流程记录下来. 本文记录了Git在Ubuntu上的安装,配置,以及创建版本库和往库中添加文件的过程. 1.Git的安装:(Ubuntu-Linux非常友好的安 ...

  6. Thrift架构~动态Thrift插件的注入

    先说AOP 说到注入,大家就会想起来IoC和AOP,确实如些,这一讲中,我们通过unity来实现对thrift插件的动态注入,事实上,这个功能在以后的项目中经常要用到,比如,你将一些功能分发到指定服务 ...

  7. javascript里阻止事件冒泡

    如下图所示,灰色块包含红色块,假设我们为灰色和红色块各绑定一个单击弹框事件,当我们点击红色块时,不希望触发灰色块的弹框事件,这就需要阻止冒泡事件了. IE里阻止冒泡事件使用cancelBubble属性 ...

  8. lua表排序

    对于lua的table排序问题,一般的按照value值来排序,使用table.sort( needSortTable , func)即可(可以根据自己的需要重写func,否则会根据默认来:默认的情形之 ...

  9. Atitit Immutability 和final的优点

    Atitit Immutability 和final的优点 什么是 immutability? 其实细分起来有语法上的 immutable (例如 Java 里的 final 关键字), 和运行时对象 ...

  10. require.js笔记

    笔记参考来源:阮一峰  http://www.ruanyifeng.com/blog/2012/10/javascript_module.html   1. 浏览器端的模块只能采用“异步加载”方式 = ...