poj 1062 最短路(昂贵的聘礼)
来源:互联网 发布:em算法应用实例 编辑:程序博客网 时间:2024/06/09 18:50
题意:中文题。
思路:最短路dijkstra。需要枚举可行区间。每次运行不用重复构图,只需将不符合题意的点在used数组提前赋值为1即可。
#include <stdio.h>#include <string.h>#define INF 0x3fffffff#define min(a,b) ((a)<(b)?(a):(b))#define max(a,b) ((a)>(b)?(a):(b))#define N 105int lev[N],g[N][N],dis[N],used[N];int n,m,k,diff;//diff为等级差别int dijkstra(int a,int b){ int i,j,min,res=0,now; for(i = 0;i<=n;i++) dis[i] = INF; memset(used, 0, sizeof(used)); for(i = 1;i<=n;i++) if(lev[i]<a || lev[i]>b) used[i] = 1; dis[0] = 0; while(1){ min = INF; for(j = 0;j<=n;j++) if(!used[j] && dis[j]<min){ min = dis[j]; now = j; } if(min == INF) break; used[now] = 1; res += min; for(j = 1;j<=n;j++) if(!used[j] && dis[j]>dis[now]+g[now][j]) dis[j] = dis[now]+g[now][j]; } return dis[1];}int main(){ int i,j,a,b,res = INF; scanf("%d %d",&diff,&n); memset(lev, 0, sizeof(lev)); for(i = 0;i<=n;i++) for(j = 0;j<=n;j++) g[i][j] = INF; for(i = 1;i<=n;i++){ scanf("%d %d %d",&a,&lev[i],&j); g[0][i] = a; while(j--){ scanf("%d %d",&a,&b); g[a][i] = b; } } for(i = max(0,lev[1]-diff);i<=lev[1];i++){ j = dijkstra(i, i+diff); res = min(res,j); } printf("%d\n",res); return 0;}
0 0
- poj 1062 昂贵的聘礼(最短路)
- POJ 1062 昂贵的聘礼 最短路
- poj 1062昂贵的聘礼 最短路
- poj 1062 昂贵的聘礼(最短路)
- POJ 1062 昂贵的聘礼 最短路
- POJ 1062 昂贵的聘礼 最短路
- POJ 1062 昂贵的聘礼(限制的最短路)
- poj 1062(最短路——昂贵的聘礼)
- POJ 1062 昂贵的聘礼 (最短路 Dijkstra)
- POJ 1062昂贵的聘礼(dijk最短路)
- POJ 1062 - 昂贵的聘礼(最短路`dijkstra)
- POJ 1062 昂贵的聘礼 (dijkstra 最短路)
- poj 1062 最短路(昂贵的聘礼)
- POJ 题目1062 昂贵的聘礼(最短路,枚举)
- POJ - 1062 昂贵的聘礼 (最短路变形)
- poj 1062 昂贵的聘礼 (最短路)
- poj 1062 昂贵的聘礼 (dijkstra最短路)
- poj 1062 昂贵的聘礼(最短路dijkstra)
- Deep Learning L教程(矢量化编程实现)(三)
- 全排列,回溯
- poj 2136 打印字母的树状图
- HDU 1166 敌兵布阵
- 【POJ 2386】 Lake Counting
- poj 1062 最短路(昂贵的聘礼)
- iptables防火墙原理详解
- MVC,MVP 和 MVVM 的图示
- aoj0118结题报告(太简单了,就不说明了)
- 【POJ 1562】 Oil Deposits
- 跨平台编译coocs2d-x工程
- file标签之保存文件
- 数组第二十二课,String类的常用方法
- dfs