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. Unable to locate secure storage module异常的解决方案

    org.eclipse.equinox.security.storage.StorageException: Unable to locate secure storage module 该异常同样是 ...

  2. 写了一个简单的NodeJS实现的进程间通信的例子

    1. cluster介绍 大家都知道nodejs是一个单进程单线程的服务器引擎,不管有多么的强大硬件,只能利用到单个CPU进行计算.所以,有人开发了第三方的cluster,让node可以利用多核CPU ...

  3. 基于百度翻译API开发属于自己的翻译工具

    你是否每天使用着网页翻译工具?你是否遇到过这种情况,上网过程中遇到一个很长的单词但是又不能复制,要开两个浏览器,一个打开百度翻译,照着另一个网页输入单词?你安装了各种翻译软件后,又删除,只因忍受不了那 ...

  4. SQL SERVER--DBA 常用到的一些脚本

    自己整理了一些常用到的脚本,希望对各位有用 下载地址 --================================== 妹子不能少,是吧 BTW, 妹子是我辛苦百度来的,请不要求种求介绍各种求 ...

  5. Lua: 好的, 坏的, 和坑爹的

                                   好的       小巧: 20000行C代码 可以编译进182K的可执行文件 (Linux下).       可移植: 只要是有ANSI ...

  6. git 操作简明扼要,命令不需要多,够用就行

    提升能力最快的方法就是做项目. 从前使用svn时,最开始是自己看网上教程,只会一个从服务端checkout文件,update一下,commit一下,后来使用到了分支,感觉好了不少,感觉svn还挺不错的 ...

  7. CSS中如何实现未知尺寸图片垂直居中

    在曾经的 淘宝UED 招聘 中有这样一道题目: “使用纯CSS实现未知尺寸的图片(但高宽都小于200px)在200px的正方形容器中水平和垂直居中.” 当然出题并不是随意,而是有其现实的原因,垂直居中 ...

  8. Symfony2模版引擎使用说明手册

    一.基本使用 {{ demo }}输出一个demo变量; {% func %}通常是包含一个twig函数例如 for; 举个for循环的例子: {% for i in 0..10 %} <em& ...

  9. LCA算法的理解

    LCA思想: 在求解最近公共祖先为问题上,用到的是Tarjan的思想,从根结点开始形成一棵深搜树,非常好的处理技巧就是在回溯到结点u的时候,u的子树已经遍历,这时候才把u结点放入合并集合中, 这样u结 ...

  10. SQL*Loader之CASE10

    CASE10 1. SQL脚本 [oracle@node3 ulcase]$ cat ulcase10.sql rem host write sys$output "Building dem ...