博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ 1062 昂贵的聘礼
阅读量:6689 次
发布时间:2019-06-25

本文共 1235 字,大约阅读时间需要 4 分钟。

题目连接

AC代码

#include
#include
#include
#include
#include
#define MAXN 1000#define INF 0x3f3f3f3fint lev[MAXN],pri[MAXN],g[MAXN][MAXN],G[MAXN][MAXN],d[MAXN],vis[MAXN];using namespace std;int m,n,k,a,b;void dijkstra(int u)//一点到其他点的最短路,邻接矩阵{ memset(vis,0,sizeof(vis)); for(int i=1;i<=m;i++)d[i]=(i==u?0:INF); for(int i=1;i<=m;i++) { int x,l=INF; for(int y=1;y<=m;y++)if(!vis[y]&&d[y]<=l)l=d[x=y]; vis[x]=1; for(int y=1;y<=m;y++) d[y]=min(d[y],d[x]+g[x][y]); }}void sift(int l,int r)//区间筛选,若一条路的两端的等级不在[l,r]内,则把g[i][j]置为INF{ for(int i=1;i<=m;i++) for(int j=1;j<=m;j++) { if(lev[i]>=l&&lev[i]<=r&&lev[j]>=l&&lev[j]<=r)g[i][j]=G[i][j]; else g[i][j]=INF; }}int pro(){ int ans=INF; for(int i=lev[1]-n;i<=lev[1];i++) { sift(i,i+n);//依次扫描区间 dijkstra(1); for(int i=1;i<=m;i++) { d[i]+=pri[i]; ans=min(ans,d[i]); } } return ans;}int main(){ scanf("%d%d",&n,&m); for(int i=0;i<=m;i++) for(int j=0;j<=m;j++) { G[i][j]=INF; g[i][j]=INF; } for(int i=1;i<=m;i++) { scanf("%d%d%d",&pri[i],&lev[i],&k); for(int j=1;j<=k;j++) { scanf("%d%d",&a,&b); G[i][a]=b; } } printf("%d\n",pro());}

 

转载地址:http://vhzoo.baihongyu.com/

你可能感兴趣的文章
用模板实现顺序表与单链表
查看>>
c++中重载,重写,重定义的区别
查看>>
nagios监控
查看>>
Linux/Centos ntp时间同步,联网情况和无网情况配置
查看>>
初级网络运维工程师比赛题目
查看>>
跨交换机实现vlan实验报告
查看>>
如何在Rancher Catalog中使用VMware Harbor
查看>>
13.C#--求1-100之间所有整数的和
查看>>
40.C#--面对对象,类的继承和构造函数继承的使用
查看>>
列表,元组,集合
查看>>
jquery easyui滚动条部分设置介绍
查看>>
cannot find -lxxx问题
查看>>
预防云端开源项目打包 Redis Labs再更改模块
查看>>
超惊人!去年发生的身分外泄安全事件是2017的4倍
查看>>
oracle sqlplus免安装的配置instantclient-basiclite
查看>>
Java开发GUI之选择列表
查看>>
一、分布式商城架构逻辑图
查看>>
find命令详解
查看>>
2018年的“核心期刊陷阱”已开启,你知道吗?2018年的“核心期刊陷阱”已开启,你知道吗?...
查看>>
rsync+shell脚本完成自动化备份
查看>>