HDU - 1142 A Walk Through the Forest
来源:互联网 发布:java阻塞队列使用场景 编辑:程序博客网 时间:2024/06/16 09:08
题意:英语着急的题目,看了别人的解释,给个图,让你求最短路,然后找出满足下列条件的个数:假设 A 和 B 是相连的,当前在 A 处,如果 A 到终点的距离大于 B 到终点的距离,
则可以从 A 通往 B 处,问满足这种的条件的路径条数。
思路:再用最短路处理完后,就是求满足条件的个数,这里用到了记忆化搜索减少搜索
用dp[i]来表示i开始的满足条件的个数
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int MAXN = 1010;const int INF = 1000000;int num,road,map[MAXN][MAXN],dis[MAXN],dp[MAXN];int vis[MAXN];void dijkstra(int start){int t,k;memset(vis,0,sizeof(vis));for (int i = 1; i <= num; i++)dis[i] = map[start][i];dis[start] = 0;vis[start] = 1;for (int i = 1; i <= num; i++){t = INF;for (int j = 1; j <= num; j++)if (!vis[j] && t > dis[j])t = dis[k=j];if (t == INF)break;vis[k] = 1;for (int j = 1; j <= num; j++)if (!vis[j] && dis[j] > dis[k]+map[k][j])dis[j] = dis[k] + map[k][j];}}int dfs(int v){int sum = 0;if (dp[v] != -1)return dp[v];if (v == 2)return 1;for (int i = 1; i <= num; i++)if (map[v][i] != INF && dis[v] > dis[i])sum += dfs(i);dp[v] = sum;return dp[v];}int main(){int x,y,cost;while (scanf("%d",&num) != EOF && num){scanf("%d",&road);for (int i = 1; i <= num; i++){dp[i] = -1;for (int j = 1; j <= num; j++)map[i][j] = INF;}for (int i = 1; i <= road; i++){scanf("%d%d%d",&x,&y,&cost);map[x][y] = map[y][x] = cost;}dijkstra(2);printf("%d\n",dfs(1));}return 0;}
0 0
- HDU 1142 A Walk Through the Forest
- A Walk Through the Forest HDU 1142
- hdu 1142 A Walk Through the Forest
- Hdu-1142 A Walk Through the Forest
- hdu 1142 A Walk Through the Forest
- HDU 1142 A Walk Through the Forest
- HDU 1142 A Walk Through the Forest
- hdu 1142 A Walk Through the Forest
- HDU 1142 A Walk Through the Forest
- HDU 1142 A Walk Through the Forest
- HDU 1142 A Walk Through the Forest
- hdu 1142 A Walk Through the Forest
- hdu 1142 A Walk Through the Forest
- hdu 1142 A Walk Through the Forest
- hdu 1142 A Walk Through the Forest
- HDU 1142 A Walk Through the Forest
- hdu 1142 A Walk Through the Forest
- hdu 1142 A Walk Through the Forest
- POJ 3767 I Wanna Go Home
- [Mitbbs]FB的intern和准备的经历
- Android 在安装完成界面,点击打开应用程序。在应用程序点击home键,再从桌面打开程序导致产生多个实例或者说程序被重复打开。(为了把问题写清楚,标题一定要长长长........)
- 图的遍历:深度优先遍历
- 美团网盈利模式剖析
- HDU - 1142 A Walk Through the Forest
- C++前插法实现链表
- MFC菜单的命令更新机制
- struts标签库技巧
- c实现按访问频度非递增有序的带头节点的双向链表检索关键字
- 图的遍历:宽度优先遍历
- 【DFS||BFS】Surrounded Regions
- 官方还将刚回家高合金钢好几个好几个好几个好几个回家
- 学习计划