标签:
/* *POJ 1062 昂贵的聘礼 *代码参考: http://poj.org/showmessage?message_id=344843 */ #include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int MAXN = 110; const int INF = 0x3f3f3f3f; int dist[MAXN], edge[MAXN][MAXN], level[MAXN]; bool visit[MAXN]; int n, m; int dijkstra() { int i, j; for (i = 0; i <= n; i++) { dist[i] = edge[0][i]; } visit[0] = 1; for (i = 1; i < n; i++) { int min = INF; int u = 0; for (j = 1; j <= n; j++) { if (!visit[j] && dist[j] < min) { u = j; min = dist[j]; } } visit[u] = 1; for (j = 1; j <= n; j++) { if (!visit[j] && edge[u][j] < INF && dist[u] + edge[u][j] < dist[j]) { dist[j] = dist[u] + edge[u][j]; } } } return dist[1]; } int main() { int i, j, num, temp; while (~scanf("%d %d", &m, &n)) { for (i = 0; i <= n; i++) { for (j = 0; j <= n; j++) { edge[i][j] = INF; } edge[i][i] = 0; } memset(level, 0, sizeof(level)); memset(visit, 0, sizeof(visit)); for (i = 1; i <= n; i++) { scanf("%d %d %d", &edge[0][i], &level[i], &num); for (j = 1; j <= num; j++) { scanf("%d", &temp); scanf("%d", &edge[temp][i]); } } int ans = INF; for (i = 1; i <= n; i++) { int lv = level[i]; for (j = 1; j <= n; j++) { if (level[j] > lv || lv - level[j] > m) { visit[j] = 1; } else { visit[j] = 0; } } int min = dijksttra(); if (ans > min) { ans = min; } } printf("%d\n", ans); } return 0; }
标签:
原文地址:http://www.cnblogs.com/subrshk/p/4251145.html