1256: 天朝的单行道

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 168  Solved: 49

Description

在另一个平行宇宙中,有一个神奇的国度名叫天朝。天朝一共有N个城市(标号分别为1, 2, …, N),M条道路,为了方便交通管制,天朝的M条道路都是单行道。
不久前天朝大选,小Q当选了天朝的总统。小Q家住在城市1,但天朝的办公地点在城市N,于是为了便于工作,小Q决定举家从城市1搬迁到城市N去居住。然而小Q惊奇的发现,现在并不存在从城市1出发到城市N路线。
但这点难题是无法阻挡天朝总统的,小Q决定行使总统的权利下令更改一些道路的通行方向,使得至少存在一条从城市1出发到城市N的路线,但为了节省时间和资源,他希望更改通行方向的道路尽可能少,你能帮帮小Q吗?

Input

输入包含多组测试数据。
对于每组测试数据,第一行包含两个正整数N (2<=N<=5000)、M (1<=M<=10000),表示天朝一共有N个城市、M条道路。接下来M行每行有两个正整数u、v (1<=u, v<=N),表示城市u和城市v之间有一条通行方向为u->v的单行道。两个城市之间可能有多条道路。

Output

对于每组测试数据,用一行输出一个整数表示最少需要更改多少条单行道的通行方向,才能使得至少存在一条路线能够让小Q从城市1出发到城市N。
如果没办法使得至少存在一条路线让小Q从城市1出发到城市N,则输出“-1”(不包括引号)。

Sample Input

2 1
1 22 1
2 12 0

Sample Output

0
1
-1
解决方案:可代换一下,正向的路径设为0,反向的路径设为1,直接求最短路就得出需要改变单行道的方向个数。
code:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#define PMax 5005
#define EMax 30005
using namespace std;
int head[PMax],d[PMax],inqueue[PMax];
int N,M,k;
struct edge
{int from,to,v;int next;
} E[EMax];
void add(int from,int to,int v)
{E[k].from=from;E[k].to=to;E[k].v=v;E[k].next=head[from];head[from]=k++;}
void spfa()
{memset(inqueue,false,sizeof(inqueue));memset(d,0x3f,sizeof(d));d[1]=0;inqueue[1]=true;queue<int>Q;Q.push(1);while(!Q.empty()){int temp=Q.front();Q.pop();inqueue[temp]=false;for(int v=head[temp]; v!=-1; v=E[v].next){if(d[E[v].to]>d[temp]+E[v].v){d[E[v].to]=d[temp]+E[v].v;if(!inqueue[E[v].to]){inqueue[E[v].to]=true;Q.push(E[v].to);}}}}}
int main()
{int from,to,v;while(~scanf("%d%d",&N,&M)){memset(head,-1,sizeof(head));k=0;for(int i=0; i<M; i++){scanf("%d%d",&from,&to);add(from,to,0);add(to,from,1);}spfa();if(d[N]>M){printf("-1\n");}else printf("%d\n",d[N]);}return 0;}

天朝的单行道+csuoj+spfa算法求最短路相关推荐

  1. SPFA算法求最短路

    AcWing 851. spfa求最短路 题目 https://www.acwing.com/problem/content/submission/853/ 给定一个 n 个点 m 条边的有向图,图中 ...

  2. SPFA算法求固定点到其它点 最短 最长 路程问题

    点击:理解请参考 例题:https://www.luogu.com.cn/problem/P1807 如果求最短路径 :vis[nex] = min(vis[nex], vis[now]+B[now] ...

  3. 2019中山纪念中学夏令营-Day14 图论初步【dijkstra算法求最短路】

    Dijkstra是我学会的第一个最短路算法,为什么不先去学SPFA呢?因为我在luogu上翻到了一张比较神奇的图: 关于SPFA -它死了 以及网上还有各位大佬的经验告诉我:SPFA这玩意很容易被卡. ...

  4. POJ 3255(迪杰斯特拉算法求次短路)

    POJ3255,问题是求节点1到n的次短路. 在dijkstra求最短路算法的基础上进行变形,用两个数组分别记录源点到各节点最短路径和次短路径: 每次更新时,都将最短路的节点及可能成为次短路的节点pu ...

  5. Floyd算法求最短路

    Floyd算法(基于动态规划):用于求多源汇最短路 初始化:用邻接矩阵d[i,j]存储中所有的边,floyd算法就是三重循环 for(k = 1;k <= n;k ++){ for(i = 1; ...

  6. 【单源最短路】Dijkstra算法求最短路

    题目描述 给定一个 n 个点 m 条边的有向图,图中可能存在重边和自环,所有边权均为正值. 请你求出 1 号点到 n 号点的最短距离,如果无法从 1 号点走到 n 号点,则输出 −1. 输入格式 第一 ...

  7. Dijkstra算法求最短路

    一.算法描述 Dijkstra算法的流程如下: 1.初始化dist[1] = 0,其余节点的dist值为无穷大. 2.找出一个未被标记的.dist[x]最小的节点x,然后标记节点x. 3.扫描节点x的 ...

  8. HDU SPFA算法 Invitation Cards

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1535 分析: 题意:求1点到其它点的最短距离之和+其它点到1点的最短距离之和 前面一部分直接用SPFA ...

  9. ACM算法--spfa算法--最短路算法

    求单源最短路的SPFA算法的全称是:Shortest Path Faster Algorithm.      SPFA算法是西南交通大学段凡丁于1994年发表的.     从名字我们就可以看出,这种算 ...

  10. 最短路算法 :Bellman-ford算法 Dijkstra算法 floyd算法 SPFA算法 详解

     本文链接   :http://www.cnblogs.com/Yan-C/p/3916281.html . 在本文中因为邻接表在比赛中不如前向星好写,而且前向星效率并不低所以,本文的代码 存图只 ...

最新文章

  1. windows server 2003磁盘管理
  2. vscode设置eslint检验无效_大整理!JavaScript开发者的27个神奇VSCode工具
  3. Python3 拼接符+和join效率对比测试
  4. Windows下Nutch的配置
  5. 三个锦囊:剖析 5G 安全难题
  6. 复旦自考 网络专业 java 上机考_上海复旦大学自考方法及考试科目
  7. [笔记] 如何从不同扩展名的数字证书中提取明文信息? *.pem *.der *.crt *.cer *.key之间的区别是什么?...
  8. 大哥都是从小弟做起的
  9. 百分点大数据技术团队:Cesium技术在智慧应急行业的应用
  10. 项目管理 | 怎么开项目启动会?
  11. 邮件发送(qq邮箱)
  12. 听觉能力类毕业论文文献有哪些?
  13. 如何在不泄露私人信息的情况下共享屏幕
  14. 【项目成长日记】VS虐我千百遍—MVC框架加EF映射MySQL需要做的准备
  15. Python列表(list)反序(降序)的7种实现方式
  16. 二三维GIS智慧环保应用平台
  17. java销售管理系统_图书销售管理系统Java源代码
  18. 表彰大会项目经理的辛酸史。数字荣誉墙外场布置大屏触控墙颁奖表彰优秀员工英雄榜单销售经理优秀经销商外场布置跳跃互动tioyo
  19. python图像条状状噪声_一起学opencv-python十(给图像加噪声,模糊处理和图像锐化)...
  20. matlab短路计算10机39节点

热门文章

  1. 严格模式 Strict Mode,与ES2020同步
  2. 显性测试数据全对的WA之uva355(已AC)
  3. 成功真正需要什么:情商德商及体商 别高估智商
  4. C程序设计——图片文件合成器
  5. Java图片文件合成器(文件操作)
  6. 大数据:阿里数据仓库建模及管理体系OneData什么是阿里onedata
  7. 13个最狂帅炫酷的前沿科技研究项目
  8. 天才小毒妃 第922章 把金针还给我
  9. 测试用例——微信发红包
  10. Echarts 实现树状图的展示与编辑示例