poj1847 最短路
题意:有n个路口,每个路口通向其他某些路口,但是每个路口的轨道有方向,初始时指向第一个给出的路口的方向,如果要去其他路口,就需要下车操作一次路口转换器,让轨道改向需要的方向,问A路口到B路口需要操作转换器的最少次数。
对于每个路口,第一个指向路口的边权值为 0 表示花费 0 次操作,其余边权值为 1 表示花费 1 次操作。直接求最短路就行。
1 #include<stdio.h> 2 #include<string.h> 3 #include<vector> 4 #include<queue> 5 #include<algorithm> 6 using namespace std; 7 typedef pair<int,int> pii; 8 9 struct cmp{ 10 bool operator()(pii a,pii b){ 11 return a.first>b.first; 12 } 13 }; 14 15 int head[105],point[10005],next[10005],val[10005],size; 16 int n,s,t,dist[105]; 17 18 void add(int a,int b,int v){ 19 point[size]=b; 20 val[size]=v; 21 next[size]=head[a]; 22 head[a]=size++; 23 } 24 25 void dij(){ 26 int i; 27 memset(dist,-1,sizeof(dist)); 28 dist[s]=0; 29 priority_queue<pii,vector<pii>,cmp>q; 30 q.push(make_pair(dist[s],s)); 31 while(!q.empty()){ 32 pii u=q.top(); 33 q.pop(); 34 if(u.first>dist[u.second])continue; 35 for(i=head[u.second];~i;i=next[i]){ 36 int j=point[i],v=u.first+val[i]; 37 if(dist[j]==-1||dist[j]>v){ 38 dist[j]=v; 39 q.push(make_pair(dist[j],j)); 40 } 41 } 42 } 43 printf("%d\n",dist[t]); 44 } 45 46 int main(){ 47 while(scanf("%d%d%d",&n,&s,&t)!=EOF){ 48 int i,j; 49 memset(head,-1,sizeof(head)); 50 size=0; 51 for(i=1;i<=n;i++){ 52 int num; 53 scanf("%d",&num); 54 for(j=1;j<=num;j++){ 55 int b; 56 scanf("%d",&b); 57 add(i,b,j==1?0:1); 58 } 59 } 60 dij(); 61 } 62 return 0; 63 }
View Code
转载于:https://www.cnblogs.com/cenariusxz/p/4785410.html
poj1847 最短路相关推荐
- 最短路常用的四种模板(poj1847)
针对于poj1847这道题,总结一下最短路常用的四种模板. ** Floyed(O(n^3)) ** #include<iostream> #include<cstdio> # ...
- 单源最短路 Dijkstra算法 和 SPFA算法
单源最短路 •从一个点出发,到达其他顶点的最短路径的长度. •基本操作:松弛 •d[u]+map[u, v]< d[v]这样的边(u,v)称为紧的(tense),可以对它进行松弛(relax): ...
- POJ - 1847 Tram 最短路,思维建图
题目链接 POJ-1847 题意 给定n节点,节点之间有道路相连,但是每个节点都有个开关,只有开关指向的节点才能通行,你可以搬动开关.给定起点终点,求最少搬动开关次数. 解法 建图,对于每个节点,初始 ...
- [C] [最短路] 只有5行的算法:Floyd-Warshall
终于学到求最短路了,终于来到我最喜欢的算法--Floyd-Warshall了!今天还有点小激动呢! 我喜欢它,当然是因为它逻辑十分简单咯!真的只有5行诶! Floyd-Warshall算法 题目描述 ...
- BZOJ4152 AMPPZ2014 The Captain(最短路)
事实上每次走到横坐标或纵坐标最接近的点一定可以取得最优方案.于是这样连边跑最短路就可以了. #include<iostream> #include<cstdio> #inclu ...
- Codeforces.1051F.The Shortest Statement(最短路Dijkstra)
题目链接 先随便建一棵树. 如果两个点(u,v)不经过非树边,它们的dis可以直接算. 如果两个点经过非树边呢?即它们一定要经过该边的两个端点,可以直接用这两个点到 u,v 的最短路更新答案. 所以枚 ...
- BZOJ1491: [NOI2007]社交网络(Floyd 最短路计数)
Time Limit: 10 Sec Memory Limit: 64 MB Submit: 2343 Solved: 1266 [Submit][Status][Discuss] Descrip ...
- HDU1811 Rank of Tetris 拓扑排序+并查集 OR 差分约束最短路+并查集
题目链接 题意:就是给你一堆关系,看能不能排出个确定的顺序 做法: 1. 拓扑排序+并查集 应该很容易想到的一种思路,大于小于建立单向边.对于相等的呢,就把他们缩成一个点.就用并查集缩成一个点就行了 ...
- E:By Elevator or Stairs? CF595 DP最短路
题目链接 比赛的时候一看,这不是最短路吗,然后敲了一个最短路. 然后比赛完发现大家基本都写的dp,我真是个憨憨,dp3行 最短路就建个简单的图,dp就是从上一维转化过来就是了 优秀的dp: //#pr ...
- The Shortest Statement CodeForces - 1051F LCA+最短路
太弱了... 一开始看到题感觉是跑一个最小生成树在上边进行LCA就行了,但是发现过不了样例,然后就是就想到了之前做过类似做法的题目,就是非生成树上的边最多只有21条,然后就那些边记录下来,通过每一条边 ...
最新文章
- 微信小程序中的tabBar设置
- 微信支付invalid total_fee 的报错
- 网警信息安全!_只愿与一人十指紧扣_新浪博客
- Windows下的for
- 流程管理精英沙龙活动(深圳站)圆满结束
- 财务需要学python-财务人要学Python吗?
- 第十周项目1-程序填空与阅读(一)
- 手机来电秀怎么开启_360手机卫士怎么设置来电秀 360手机卫士来电秀设置方法...
- 微信支付亲属卡新增“其他亲人”选项 “子女”增加至三张
- mysql utf-8_完美解决mysql下utf-8的乱码问题
- r语言c50算法的过程,【机器学习与R语言】5-规则学习算法
- Makefile的基本规则实例说明
- 说好的「机器人出租车」和「自动驾驶汽车」,到底在哪?
原创 我爱至尊宝 科技行者 昨天...
- macbook解决软件无法安装的问题
- 《数学建模与数学实验》第5版 插值与拟合 习题7.6
- 高大上的cmd命令行来袭!颜值与内涵兼备
- 【解读基金-我的投资观与实践】阅读笔记
- 什么是H5?有哪些特点?
- ubuntu16.04离线安装NIVIDIA驱动
- Unity 智能语音助手
热门文章
- java文件上传中间件_maven工程 java 实现文件上传 SSM ajax异步请求上传
- android studio 导入c,3.3、Android Studio 添加 C 和 C++ 项目
- java历save_日历【savejava吧】_百度贴吧
- java json jquery_JQuery提交JSON string数据
- ping,python实现批量ping包工具--小案例v3优化版本
- delphi和python和halcon_【《zw版·Halcon与delphi系列原创教程》Halcon图层与常用绘图函数...
- linux ls 输出格式,(转)linux 中使用ls指定输出时间格式
- gini系数 决策树_决策树原理,机器学习系列
- 自学TP5源码(一)
- ubuntu18.4 中 mysql5.7 全完卸载与安装