标签:des style blog http os width
Description
The forest is beautiful, and Jimmy wants to take a different route everyday. He also wants to get home before dark, so he always takes a path to make progress towards his house. He considers taking a path from A to B to be progress if there exists a route from B to his home that is shorter than any possible route from A. Calculate how many different routes through the forest Jimmy might take.
5 6 1 3 2 1 4 2 3 4 3 1 5 12 4 2 34 5 2 24 7 8 1 3 1 1 4 1 3 7 1 7 4 1 7 5 1 6 7 1 5 2 1 6 2 1 0
2 4
题意:Jimmy打算每天沿着一条不同的路走,而且,他只能沿着满足如下条件的道路(A,B):存在一条从B出发回家的路径,比所以从A出发回家的路径都短,你的任务是计算有多少条不同的路径
思路:所以求回家的最短路径,然后就是求满足dist[A]>dist[B]的所有的可能路径,通过dist[A]>dist[B]我们可以创建一个新图,则题目就是求从起点到终点的路径条数
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <queue> using namespace std; const int MAXN = 1010; const int INF = 0x3f3f3f3f; int dp[MAXN], dist[MAXN], cost[MAXN][MAXN]; int vis[MAXN]; int n, m, s, e, w; void Dijkstra() { int Min, cnt; for (int i = 1; i <= n; i++) dist[i] = cost[2][i]; vis[2] = 1; for (int i = 1; i <= n; i++) { Min = INF; for (int j = 1; j <= n; j++) if (!vis[j] && dist[j] < Min) { Min = dist[j]; cnt = j; } vis[cnt] = 1; if (Min == INF) break; for (int k = 1; k <= n; k++) if (!vis[k] && dist[k] > dist[cnt]+cost[k][cnt]) dist[k] = dist[cnt] + cost[k][cnt]; } } int dfs(int cur) { if (dp[cur] > 0) return dp[cur]; int ans = 0; for (int i = 1; i <= n; i++) { if (dist[cur] > dist[i] && cost[cur][i] != INF) ans += dfs(i); } return dp[cur] = ans; } int main() { while (scanf("%d", &n) != EOF && n) { scanf("%d", &m); memset(cost, INF, sizeof(cost)); memset(dist, INF, sizeof(dist)); memset(vis, 0, sizeof(vis)); memset(dp, 0, sizeof(dp)); for (int i = 0; i <= n; i++) cost[i][i] = 0; for (int i = 0; i < m; i++) { scanf("%d%d%d", &s, &e, &w); cost[s][e] = cost[e][s] = w; } Dijkstra(); dp[2] = 1; int ans = dfs(1); printf("%d\n", ans); } return 0; }
UVA - 10917 Walk Through the Forest (最短路+DP),布布扣,bubuko.com
UVA - 10917 Walk Through the Forest (最短路+DP)
标签:des style blog http os width
原文地址:http://blog.csdn.net/u011345136/article/details/37990651