【动态规划】【最短路径】Problem 3 Cyh和香穗子
来源:互联网 发布:淘宝店铺项目规划方案 编辑:程序博客网 时间:2024/06/03 02:55
话说,Cyh和香穗子是好朋友,一天他们在fzsz迷路了….Cyh在地点1,香穗子在地点n.由于Cyh是土生土长的fzsz人,所以Cyh准备去n地给香穗子带路.
fzsz是个奇怪的地方,它由n地点组成,并且任意两个地点A,B满足要么A能到B,要么B能到A,要么都不能互相到达,一定不存在A和B都能互相到达.
现在Cyh希望快点到达n地
输入:
第一行两个数n,m
接下来m行,每行两个数a,b,表示地点a能达到地点b
输出:
Cyh最少经过的地点数
Sample Input
4 5
1 2
2 3
2 4
1 3
3 4
Sample Output
3
数据范围:
n<=100000,m<=500000,保证有解
#include <cstdio>#include <cstdlib>#include <iomanip>#include <cstring>#include <algorithm>using namespace std;int N, M;struct Edge{ int u, v, d; Edge *next; Edge(){} Edge(int v, int d, Edge *next): v(v), d(d), next(next){}}*edge[500005];int dist[100005];int queue[2000000];bool Vst[100005];inline void Ins(int u, int v, int d){ edge[u] = new Edge(v, d, edge[u]); return;}void init_file(){ freopen("3.in", "r", stdin); freopen("3.out", "w", stdout);}void read_data(){ scanf("%d%d", &N, &M); for(int i = 0; i < M; i++) { int u, v; scanf("%d%d", &u, &v); Ins(u, v, 1); } return;}void work(){ int S = 1; static int f = 0, r = 0, u, v; static Edge *p; memset(dist, 0x4f, sizeof dist); for(dist[queue[r++] = S] = 0, Vst[S] = 1; f < r;) for(p = edge[u = queue[f++]], Vst[u] = 0; p; p = p -> next) if(dist[v = p -> v] - p -> d > dist[u]) { dist[v]= p -> d + dist[u]; if (!Vst[v]) Vst[queue[r++] = v] = 1; } printf("%d\n", dist[N] + 1); return;}int main(){ init_file(); read_data(); work(); return 0;}
这道题也可以DP做…
但是用欧教的话来说…
DP的本质是有向无环图上求单源点最短路
- 【动态规划】【最短路径】Problem 3 Cyh和香穗子
- 【广搜】Cyh和香穗子
- 【动态规划】Problem 1 活蹦乱跳的香穗子
- 【动态规划】Problem 2 可爱迷人的香穗子
- 【动态规划】Problem 4 聪明伶俐的香穗子
- 动态规划 最短路径
- 动态规划 最短路径
- 最短路径 动态规划
- 最短路径(动态规划)
- 最短路径和最少花费问题--动态规划
- 【动态规划】聪明伶俐的香穗子
- 动态规划法求多段图的最短路径
- 最短路径问题 动态规划
- 动态规划最短路径问题
- 动态规划 显示最短路径
- 动态规划、最短路径、Floyd算法
- 动态规划之最短路径
- 动态规划算法--最短路径问题
- Linux中wine环境下安装Protel系列EDA软件
- 0权限上传数据(转载)
- 【动态规划】Problem 2 可爱迷人的香穗子
- 函数模板
- 堆作为最大优先级队列
- 【动态规划】【最短路径】Problem 3 Cyh和香穗子
- struct和class的区别
- 【动态规划】Problem 4 聪明伶俐的香穗子
- 数据库
- 运算符优先级 计算 a^b << 2
- 一个计算机爱好者的不完整回忆(四十七)直接被淘汰了
- ural 1280Topological Sorting
- 运算符重载
- Scribe