POJ1062昂贵的聘礼 枚举最短路spfa
来源:互联网 发布:excel宏的编程实例 编辑:程序博客网 时间:2024/05/17 01:47
网址:http://poj.org/problem?id=1062
首先是建图。以编号0为搜索起点,以酋长物品(编号1)为终点求最短路。编号0到任意一个点的边权值为该物品原本的价值。非零点之间的权值为优惠后的价格。
因为有等级限制,所以有的点没办法经过。所以要假设一个等级为最小的等级,枚举这些最小等级,枚举后最小的长度就是结果。
我用的spfa方法
#include<iostream>#include<queue>#include<string>#include<algorithm>#include<cmath>using namespace std;#define INF 0x3f3f3f3f#define MAX 200+5#define N 5000+5#define mem(arr,a) memset(arr,a,sizeof(arr))int n, m;int d[N];int cost[MAX][MAX];int vis[N];int use[N];int money, ranks[N], rep;int spfa(){ mem(d, INF); d[0] = 0; mem(use, 0); queue<int>q; q.push(0); while (!q.empty()){ int u = q.front(); q.pop(); use[u] = 0; for (int i = 1; i <= m; i++){ if (!vis[i] && d[i] > d[u] + cost[u][i]){ d[i] = d[u] + cost[u][i]; if (!use[i]){ use[i] = 1; q.push(i); } } } } return d[1];}void build(){ int minflow = INF; for (int i = 1; i <= m; i++){ int maxranks = ranks[i]; mem(vis, 0); for (int j = 1; j <= m; j++){ if (maxranks<ranks[j] || maxranks - ranks[j]>n)vis[j] = 1; } minflow = min(minflow, spfa()); } cout << minflow << endl;}int main(){ while (cin >> n >> m) { mem(cost, INF); for (int i = 1; i <= m; i++){ cin >> money >> ranks[i] >> rep; for (int j = 1; j <= rep; j++){ int t, v; cin >> t >> v; cost[t][i] = v; } cost[0][i] = money; } build(); }}
阅读全文
0 0
- POJ1062昂贵的聘礼 枚举最短路spfa
- POJ1062 昂贵的聘礼 解题报告【最短路/SPFA】
- poj1062 [ZJOI2002]昂贵的聘礼(spfa+枚举)
- poj1062 昂贵的聘礼 最短路
- poj1062 昂贵的聘礼(最短路变形)
- POJ1062 昂贵的聘礼(dijkstra最短路)
- POJ1062 昂贵的聘礼(最短路)
- poj1062 昂贵的聘礼 (最短路)
- poj1062 昂贵的聘礼 (最短路)
- poj1062昂贵的聘礼(题解)最短路
- poj1062 昂贵的婚礼 最短路变形 spfa 枚举 思考
- poj1062 昂贵的聘礼 (spfa)
- 昂贵的聘礼(SPFA最短路)
- POJ1062 昂贵的聘礼(Dijkstra最短路)
- poj1062昂贵的聘礼【最短路反向建图】
- poj1062 昂贵的聘礼 (dijkstra最短路算法)
- POJ1062---昂贵的聘礼(最短路:题意。。)
- 1062 昂贵的聘礼 //枚举+最短路
- dtd定义属性
- 树梅派samba的共享文件的搭建及问题解决
- 线性表的顺序表示和实现
- (196)材质操作指南
- JAVA变量
- POJ1062昂贵的聘礼 枚举最短路spfa
- 海外SDK之----------苹果支付
- 反射
- ubuntu16.04安装配置tensorflow以后,每次开启都显示错误,需要设置变量
- (197)材质编辑器
- 安装apue.h
- 对几种二叉树的简单理解
- Team Foundation Server 2015 序列号及下载地址
- 奇异值分解SVD应用——LSI