图论 --- spfa + 链式向前星 (模板题) dlut 1218 : 奇奇与变形金刚
来源:互联网 发布:算法 编辑:程序博客网 时间:2024/04/30 13:31
1218: 奇奇与变形金刚
Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 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 longusing 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;}
0 0
- 图论 --- spfa + 链式向前星 (模板题) dlut 1218 : 奇奇与变形金刚
- dlut1218-spfa(链式向前星)模板题
- 链式向前星and spfa模板
- 杰奇模板详解
- 杰奇模板详解
- 图论 --- spfa + 链式向前星 : 判断是否存在正权回路 poj 1860 : Currency Exchange
- NYOJ 1274 信道安全【最短路,spfa+链式向前星】
- 百奇与编程
- 图的存储模式——链式向前星模板
- 链式向前星 DFS
- 链式向前星 BFS
- 链式向前星
- 链式向前星
- -----模板spfa+邻接表,spfa+链式前向星
- 向上吧,奇奇
- 拓扑排序 链式向前星
- 汽车打捞现场 奇!奇!!奇!!!
- 深度理解(链式前向星+spfa模板)
- Android Volley完全解析(二):使用Volley加载网络图片
- Centos通过IP端口无法访问网站
- IDEA常用快捷键
- Hadoop简介
- Hadoop到底是什么玩意?
- 图论 --- spfa + 链式向前星 (模板题) dlut 1218 : 奇奇与变形金刚
- 电视网络精灵
- 图论 --- spfa + 链式向前星 : 判断是否存在正权回路 poj 1860 : Currency Exchange
- HashMap问答
- Tensorflow | Random |常用函数介绍
- 模拟 --- hdu 12878 : Fun With Fractions
- 数论
- 公众号基本信息介绍
- dp or 贪心 --- hdu : Road Trip