>Description
现在假设每条道路需要花费小X的时间为1,由于有数以万计的好朋友沿路祝贺,导致小X在通过某些路不得不耗费1的时间来和他们聊天,尽管他希望尽早见到小C,所以他希望找到一条最快时间到达电影院的路。
一开始小X在1号点,共有N个点,M条路,电影院为T号点。


>Input
第一行2个正整数,分别为n,m,t
以下m行,每行3个数,表示连接的编号以及权值
(注意,可能会有重边)

>Output
一行一个数,表示1到t的最短路


>Sample Input
10 12 6
3 9 2
6 9 2
6 2 1
3 1 1
1 9 2
2 8 2
7 10 1
7 2 1
10 0 1
8 1 1
1 5 2
3 7 2

>Sample Output
4

30%:n<=10 m<=20
60%: n<=1000 m<=20000
100%: n<=5000000 m<=10000000


>解题思路
原本打一个裸的SPFA可以得70分。

满分算法:
用BFS。因为路径长度不是1就是2,所以我们可以把2转化为1,也就是在一条权值为2的边上在加上一个点,使x->y,变成x->z->y,权值全部为1。这样每一条边的权值就是相等的了,变为谁先到t点谁就是最优的。

还要用快读。


>代码

#include<iostream>
#include<string>
#include<cstdio>
using namespace std;
struct ooo
{int to,next;
}a[40000005];
int n,m,t,x,y,z,tt,s,head,tail,h[10000005],st[10000005],c[10000005];
bool lhq[10000005];
char cc;
int input()
{int l=0;cc=getchar();while(cc<'0'||cc>'9') cc=getchar();while(cc>='0'&&cc<='9'){l=l*10+cc-'0';cc=getchar();}return l;
} //快读
int main()
{n=input(),m=input(),t=input();s=n; //s记录新建的点for(int i=1;i<=m;i++){x=input(),y=input(),z=input();if(z==1) //权值为1时直接连接{a[++tt].to=y; a[tt].next=h[x]; h[x]=tt;a[++tt].to=x; a[tt].next=h[y]; h[y]=tt; //连接x,y}else //为2时创点{s++;a[++tt].to=s; a[tt].next=h[x]; h[x]=tt;a[++tt].to=x; a[tt].next=h[s]; h[s]=tt; //连接x,sa[++tt].to=s; a[tt].next=h[y]; h[y]=tt;a[++tt].to=y; a[tt].next=h[s]; h[s]=tt; //连接s,y}}head=0; tail=1; st[1]=1; lhq[1]=1; //st为队列,lhq记录某点有没有走过while(head<tail){head++;for(int i=h[st[head]];i;i=a[i].next)if(!lhq[a[i].to]) //没有走过{st[++tail]=a[i].to; lhq[a[i].to]=1;c[a[i].to]=c[st[head]]+1; //加入队列if(a[i].to==t) //如果到了t,就直接输出{printf("%d",c[t]);return 0;}}}return 0;
}

极其简单的最短路问题【BFS】【图论】相关推荐

  1. 【bfs】极其简单的最短路问题

    极其简单的最短路问题 题目大意: 求最短路,权值只有1或2 原题: 题目描述 小C终于被小X感动了,于是决定与他看电影,然而小X距离电影院非常远,现在假设每条道路需要花费小X的时间为1,由于有数以万计 ...

  2. 极其简单的最短路问题

    极其简单的最短路问题 题目 小C终于被小X感动了,于是决定与他看电影,然而小X距离电影院非常远,现在假设每条道路需要花费小X的时间为1,由于有数以万计的好朋友沿路祝贺,导致小X在通过某些路不得不耗费1 ...

  3. 【BFS】【图论】极其简单的最短路问题

    题目: 小C终于被小X感动了,于是决定与他看电影,然而小X距离电影院非常远,现在假设每条道路需要花费小X的时间为1,由于有数以万计的好朋友沿路祝贺,导致小X在通过某些路不得不耗费1的时间来和他们聊天, ...

  4. 2716: 极其简单的最短路问题(spfa裸题 or bfs)

    一场游戏一场空,最终 最初都由我掌控,好像一身从容,不曾有狼狈伤痛,可深夜一个人该如何相拥? 题目描述 小C终于被小X感动了,于是决定与他看电影,然而小X距离电影院非常远,现在假设每条道路需要花费小X ...

  5. Flash Builder4.7极其简单破解方法-三步搞定(亲测)

    资讯类型: 转载 来源页面: http://weibo.com/2101024913/yvmR0D9Df 资讯原标题: 资讯原作者: 丿卓越丶星辰 翻译词数: 词 我的评论: 对这篇文你有啥看法,跟贴 ...

  6. JQuery插件让图片旋转任意角度且代码极其简单 - 摘自网友

    JQuery插件让图片旋转任意角度且代码极其简单 2012-04-01 09:57:03     我来说两句       收藏    我要投稿 引入下方的jquery.rotate.js文件,然后通过 ...

  7. 有自学能力的人,赚钱极其简单—来福宝盒

    如果说一个人连一点自学能力都没有,想通过互联网做生意赚钱是非常难的. 一.自学能力是什么? 一个人吸收接纳事物的能力,更明确说一个人在没有接受指导和教育的情况下掌握某种技能.为什么要有自学能力? 有自 ...

  8. 一个极其简单的用golang net写的tcpip echoserver

    一个极其简单的用golang net写的tcpip echoserver 关键字:linux golang tcpip echoserver 虽然然效率不是很理想,但是可以给初学者参考 package ...

  9. Flash Builder4.7极其简单破解方法-三步搞定

    Flash Builder4.7极其简单破解方法-三步搞定(亲测) 原方法适用于4.6版本,同样方法4.7完美破解,不敢独享 具体步骤如下: 1.到Adobe官网下载FlashBuilder 4.6, ...

最新文章

  1. FFmpeg for ios架构:中级
  2. .9-浅析webpack源码之NodeEnvironmentPlugin模块总览
  3. 解决ckeditor富文本在layui 弹框中大小字体等下拉不显示
  4. Windows Phone 8初学者开发—第7部分:本地化应用程序
  5. vim怎么跳转到函数定义处_Vim、gvim操作跳转光标区块和代码块的跳转
  6. Delphi中一些DLL的运用。
  7. vue ---- 实现手机端(左滑 删除。右划 正常)
  8. Leetcode44. Wildcard Matching
  9. [js高手之路]搞清楚面向对象,必须要理解对象在创建过程中的内存表示
  10. VSCode设置中文语言
  11. TCP/IP协议中IP数据保报文格式详解
  12. 解决 Evernote 印象笔记中代码语法高亮
  13. 机器是如何学习的?(监督式学习)
  14. SQL SERVER学习记录
  15. 苹果手机怎么看生产日期?参考方法在这!
  16. 慧据价值 链接未来丨第八届数据技术嘉年华大会全议程精彩呈现
  17. 微信小程序——点击文字出现编辑区域修改该文字
  18. laydate天蓝色皮肤
  19. 大仗的打法——推荐《智能商业》曾鸣的战略格局
  20. 用二分查找在一个有序数组中找数

热门文章

  1. 交叉编译 Crypto++
  2. windchill创建定时队列执行
  3. WordPress主题开发自定义导航菜单方法
  4. 那些无聊的人为什么排长队去买土掉渣烤饼?
  5. 桜川未央 - 隠した涙
  6. Veeam Backup Replication 11a (Windows) - 虚拟、物理和云备份软件
  7. flutter 初体验 页面的跳转
  8. 潇洒郎: python !r !s
  9. 梯度下降法,牛顿迭代,牛顿法,拟牛顿法总结对比
  10. C# Delegate 使用