POJ_1062_(dijkstra)
| Time Limit: 1000MS | Memory Limit: 10000K | |
| Total Submissions: 48126 | Accepted: 14343 |
Description
为了方便起见,我们把所有的物品从1开始进行编号,酋长的允诺也看作一个物品,并且编号总是1。每个物品都有对应的价格P,主人的地位等级L,以及一系列的替代品Ti和该替代品所对应的"优惠"Vi。如果两人地位等级差距超过了M,就不能"间接交易"。你必须根据这些数据来计算出探险家最少需要多少金币才能娶到酋长的女儿。
Input
Output
Sample Input
1 4
10000 3 2
2 8000
3 5000
1000 2 1
4 200
3000 2 1
4 200
50 2 0
Sample Output
5250
这题是好题啊!
题意:求得到酋长女儿的最小花费。帮助他得到别人的某件物品可以得到一个新的价格。另外的人也是如此,物品有原价,帮他得到
另一人的某物品,又可以得到一个新价格,以此类推。每个人有一个等价,相差M级的人之间不能直接或间接交易。 最开始用dfs写,因为没处理好等级的关系,没做出来,后来发现,这道题的图可以有很多边,以至于dfs跑不出来。然后用spfa做,
也没做出来,然后看了题解。 思路:该人可以为任意等级,那么枚举他的等级,并且规定他只与比他等级低并且满足等级差关系的人交易,然后用dijkstra跑。 做的时候没想到用最短路,感觉还是自己的建模能力不行,没有能够想到,继续练吧。 这题又复习了一下dijkstra这个经典算法。
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
#define N 105
#define INF 999999999 int n,m; struct Edge
{
int v,val,next;
} edge[N*N];
int head[N],cnte; void addEdge(int a,int b,int val)
{
edge[cnte].v=b;
edge[cnte].val=val;
edge[cnte].next=head[a];
head[a]=cnte++;
} int item[N],lev[N],dist[N],vis[N]; int dijkstra()
{
for(int i=head[]; i!=; i=edge[i].next)
{
if(vis[edge[i].v]==)
dist[edge[i].v]=edge[i].val;
}
dist[]=;
vis[]=;
for(int i=; i<=n; i++)
{
int u=,minn=INF;
for(int j=; j<=n; j++)
{
if(dist[j]<minn&&vis[j]==)
{
minn=dist[j];
u=j;
}
}
vis[u]=;
for(int j=head[u]; j!=; j=edge[j].next)
{
int v=edge[j].v;
int val=edge[j].val;
if(dist[v]>dist[u]+val&&vis[v]==)
dist[v]=dist[u]+val;
}
}
} int main()
{
while(scanf("%d%d",&m,&n)!=EOF)
{
memset(head,,sizeof(head));
cnte=;
int minlv=INF,maxlv=;
for(int i=; i<=n; i++)
{
int x;
scanf("%d%d%d",&item[i],&lev[i],&x);
addEdge(,i,item[i]);
minlv=min(minlv,lev[i]);
maxlv=max(maxlv,lev[i]);
while(x--)
{
int ver,value;
scanf("%d%d",&ver,&value);
addEdge(ver,i,value);
}
}
int res=item[];
for(int i=minlv; i<=maxlv; i++)
{
memset(vis,,sizeof(vis));
for(int i=; i<=n; i++)
dist[i]=INF;
for(int j=; j<=n; j++)
if(lev[j]>i||i-lev[j]>m)
vis[j]=;
dijkstra();
//cout<<dist[1]<<endl;
res=min(res,dist[]);
}
printf("%d\n",res);
}
return ;
}
POJ_1062_(dijkstra)的更多相关文章
- Dijkstra 单源最短路径算法
Dijkstra 算法是一种用于计算带权有向图中单源最短路径(SSSP:Single-Source Shortest Path)的算法,由计算机科学家 Edsger Dijkstra 于 1956 年 ...
- 最短路径算法-Dijkstra
Dijkstra是解决单源最短路径的一般方法,属于一种贪婪算法. 所谓单源最短路径是指在一个赋权有向图中,从某一点出发,到另一点的最短路径. 以python代码为例,实现Dijkstra算法 1.数据 ...
- [板子]最小费用最大流(Dijkstra增广)
最小费用最大流板子,没有压行.利用重标号让边权非负,用Dijkstra进行增广,在理论和实际上都比SPFA增广快得多.教程略去.转载请随意. #include <cstdio> #incl ...
- POJ 2253 Frogger(Dijkstra)
传送门 Frogger Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 39453 Accepted: 12691 Des ...
- POJ 2387 Til the Cows Come Home(最短路 Dijkstra/spfa)
传送门 Til the Cows Come Home Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 46727 Acce ...
- Dijkstra 算法
all the nodes should be carectorized into three groups: (visited, front, unknown) we should pay spec ...
- 51nod 1459 迷宫游戏 (最短路径—Dijkstra算法)
题目链接 中文题,迪杰斯特拉最短路径算法模板题. #include<stdio.h> #include<string.h> #define INF 0x3f3f3f3f ],v ...
- 51nod1459(带权值的dijkstra)
题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1459 题意:中文题诶- 思路:带权值的最短路,这道题数据也没 ...
- 求两点之间最短路径-Dijkstra算法
Dijkstra算法 1.定义概览 Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止.D ...
随机推荐
- jquery 联动 年月日
<html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>JQuery实例 - 生成年 ...
- Android 布局自适应屏幕
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvenFzNjI3NjExMzA=/font/5a6L5L2T/fontsize/400/fill/I0JBQk ...
- mysql数据库批量高速插入
近期在处理一批数据,须要从库中表里的字段进行处理然后导出到一个新表中.只是这个表的数据量有近500w条. 这数据量出现的的问题是须要处理的时间好长. 首先想到,一句一句的插入,大数据量处理时间好长,忽 ...
- 脱离开发软件启动Tomcat访问项目
作为开发人员平时用的最多的就是通过开发软件启动Tomcat服务,从而访问项目.这样便于开发的bug调试 此处讲的是脱离开发软件启动Tomcat访问项目 链接参考: http://jingyan.bai ...
- 【转载】limits.h
limits.h专门用于检测整型数据数据类型的表达值范围. <limits.h>主要提供对整型和字符型范围的限制的宏,同样没有指定类型和函数的定义. 1.整型宏如下表: 2.字符型宏如下表 ...
- Postman发送GET请求带中文
当使用Postman进行GET请求,并且请求参数里携带中文得时候,会请求失败 这时,需要对GET请求参数携带的中文进行编码即可请求成功
- P2700逐个击破(并查集/树形dp)
P2700 逐个击破 题目背景 三大战役的平津战场上,傅作义集团在以北平.天津为中心,东起唐山西至张家口的铁路线上摆起子一字长蛇阵,并企图在溃败时从海上南逃或向西逃窜.为了就地歼敌不让其逃走,老毛同志 ...
- 给独立搭建的博客启用https的过程
申请SSL证书 我自己独立搭建的博客部署在阿里云服务器上,因此我就先搜索阿里云启用https的方法,网上有比较详细的讲解,在此提供一个参考网址: https://blog.csdn.net/csluc ...
- nginx 多进程 + io多路复用 实现高并发
一.nginx 高并发原理 简单介绍:nginx 采用的是多进程(单线程) + io多路复用(epoll)模型 实现高并发 二.nginx 多进程 启动nginx 解析初始化配置文件后会 创建(for ...
- 【工具】---- json-server基本使用
一.概念 在开发过程中,前端通常需要等待后端开发完接口后,再调用接口渲染相应的数据,这会影响开发效率.而json-server的作用就是为了解决前后端并行开发的痛点,在本地模拟后端接口用来测试前端效果 ...