POJ 1062 昂贵的聘礼 (最短路 Dijkstra)
来源:互联网 发布:小孩编程软件 编辑:程序博客网 时间:2024/05/01 16:36
昂贵的聘礼
大意:中文题
思路:每个物品看成一个节点,酋长的允诺也看作一个物品, 如果一个物品加上金币可以交换另一个物品,则这两个节点之间有边,权值为金币数,求第一个节点到所有节点的最短路。因为有等级限制,所以枚举每个点作为最低等级,选取符合所有符合等级限制的点。
PS:参考的别人的博客,理解的不是很透彻,有些地方没想明白,后面还是要复习一下。
#include <stdio.h>#include <stdlib.h>#include <string.h>#define INF 0x7FFFFFFFint N, M;///物品i在有t号替代品的情况下的优惠价Map[i][t],当t=0时说明i无替代品,此时为原价int Map[110][110]; int dis[110]; ///最初的源点0到任意点i的最初距离(权值),相当于每个物品的原价int level[110];int x[110];bool vis[110];int Dijkstra(){ int p; int Min_d; for(int i = 1; i <= N; i++) { ///假设最初的源点就是0点,初始化最初源点到各点的权值dis[i] dis[i] = Map[0][i]; } for(int i = 1; i <= N; i++) { p = 0; Min_d = INF; for(int j = 1; j <= N; j++) { if(!vis[j] && Min_d >dis[j]) { Min_d = dis[j]; p = j; } } if(!p) { break; } vis[p] = true; for(int j = 1; j <= N; j++) { ///把未访问但与新源点连通的点进行松弛 if(!vis[j] && Map[p][j] > 0 &&dis[j] > dis[p]+Map[p][j]) { dis[j] = dis[p]+Map[p][j]; } } } ///返回当前次交易后目标点1在等级level[i]约束下的最短距离 return dis[1]; }void Solve(){ memset(Map, 0, sizeof(Map)); memset(level, 0, sizeof(level)); memset(vis, false, sizeof(vis)); memset(dis, INF, sizeof(dis)); scanf("%d%d", &M, &N); for(int i = 1; i <= N; i++) { ///Map[0][i]为物品i无替代品时的原价 scanf("%d%d%d", &Map[0][i], &level[i], &x[i]); for(int j = 1; j <= x[i]; j++) { int t, u; scanf("%d%d", &t, &u); Map[t][i] = u; } } int Max_level; int Min_price = INF; for(int i = 1; i <= N; i++) { Max_level = level[i];///把当前物品的等级暂时看做最高等级 for(int j = 1; j <= N; j++) { if(level[j] > Max_level || Max_level-level[j] > M) vis[j] = true; else vis[j] = false; } int t = Dijkstra(); if(Min_price > t) Min_price = t; } printf("%d\n", Min_price);}int main(){ Solve(); return 0;}
0 0
- POJ 1062 昂贵的聘礼 (最短路 Dijkstra)
- POJ 1062 - 昂贵的聘礼(最短路`dijkstra)
- POJ 1062 昂贵的聘礼 (dijkstra 最短路)
- poj 1062 昂贵的聘礼 (dijkstra最短路)
- poj 1062 昂贵的聘礼(最短路dijkstra)
- POJ - 1062 昂贵的聘礼(最短路Dijkstra)
- POJ 1062 昂贵的聘礼 (最短路应用 Dijkstra算法)
- POJ 1062昂贵的聘礼 最短路dijkstra
- [POJ 1062] 昂贵的聘礼 [最短路+枚举] [dijkstra]
- poj 1602 昂贵的聘礼(dijkstra求最短路)
- POJ 1062 : 昂贵的聘礼 - 最短路Dijkstra+枚举(难)
- poj 1062 昂贵的聘礼(最短路)
- POJ 1062 昂贵的聘礼 最短路
- poj 1062昂贵的聘礼 最短路
- poj 1062 昂贵的聘礼(最短路)
- POJ 1062 昂贵的聘礼 最短路
- POJ 1062 昂贵的聘礼 最短路
- POJ 1062昂贵的聘礼(最短路径.Dijkstra)
- 套接字编程简介<一>
- 贪心思想题的解题报告
- Asp.net:清空一段文字内的所有html标签
- 动态规划-钢条切割问题
- Yii Framework 开发教程(2) Yii Web应用基础
- POJ 1062 昂贵的聘礼 (最短路 Dijkstra)
- android屏幕适配是dip与px的相互转换
- Yii Framework 开发教程(3) 为应用添加日志
- 573 - The Snail
- Node.js初探之hello world
- Yii Framework 开发教程(4) Hangman 猜单词游戏实例
- Android Web Server
- 77 Android BroadcastReceiver 和 Notification
- 重新编译x264解决x264_opencl_load_library 中common/opencl.c:61: undefined reference to `dlopen'