1062:昂贵的聘礼

编程入门 行业动态 更新时间:2024-10-18 06:04:58

1062:昂贵的<a href=https://www.elefans.com/category/jswz/34/1716560.html style=聘礼"/>

1062:昂贵的聘礼

dijkstra, 单源最短路径
建图
我们可以选取一个超级源点0(即虚拟源点 0 ),每个物品i自身的价格就相当于从顶点0到顶点i连一条边,每个物品i有多个可替代点就相当于从可替代点到顶点i连一条边,最终问题转化为求从顶点0到顶点1的最短路径。
参考
AC代码

//dijkstra, 单源最短路径
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;const int N = 110, INF = 0x3f3f3f3f;
int n, m;
int g[N][N], level[N],dis[N];
bool vis[N];int dijkstra(int down, int up) { // 等级区间[down, up]int i, j;memset(dis, INF, sizeof(dis));memset(vis, 0, sizeof(vis));dis[0] = 0;for (i = 1; i <= n; i++) {int tmp = -1;for(j = 0; j <= n; j++) {//找未访问点中距离最小的,if (!vis[j] && (tmp == -1 || dis[tmp] > dis[j]))tmp = j;}vis[tmp] = true;for (j = 0; j <= n; j++) {//更新距离if (level[j] >= down && level[j] <= up)dis[j] = min(dis[j], dis[tmp] + g[tmp][j]);}}return dis[1];
}int main() {int i;cin >> m >> n;// m地位等级差距限制, n物品的总数memset(g, INF, sizeof(g));// 初始化邻接矩阵   for (i = 1; i <= n; i++)g[i][i] = 0;for (i = 1; i <= n; i++) {int price, cnt;cin >> price>>level[i]>>cnt;g[0][i] =price; // 超级源点0到顶点i while (cnt--) {int id, cost;cin >> id >> cost;g[id][i] =cost;//可替代点id到顶点i}}int res = INF;for (i = level[1] - m; i <= level[1]; i++)//等级限制res = min(res, dijkstra(i, i + m));cout << res << endl;return 0;
}

更多推荐

1062:昂贵的聘礼

本文发布于:2024-03-07 02:06:07,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1716557.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:聘礼   昂贵

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!