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 ...
随机推荐
- yarn-cli 添加
添加依赖包 当你想使用另一个包时,你要先把它添加到依赖列表中.也就是执行 yarn add [package-name] 命令将它安装到你的项目中. 这也将同时更新你的 package.json 和 ...
- 5 shell命令之tr
这是一个奇妙的命令. tr的全拼就是translate,即翻译.有趣的是我们能够制定规则进行翻译.使用方法例如以下: tr [option] set1 [set2] tr从标准输入接受输入.然后将结 ...
- Linux改动/etc/profile配置错误command is not found自救方法
我的CSDN博客地址: http://blog.csdn.net/caicongyang 博主之前在改动了/etc/profile配置文件方法后,导致bash命令无法用 运行ls命令结果例如以下: - ...
- 【Hibernate】Hibernate的多表查询
在<[Hibernate]Hibernate的聚类查询.分组查询.排序与时间之差>(点击打开链接)一文中已经讲述过怎样利用HQL语句代替SQL语句.进行聚类查询.分组查询.排序与时间之差的 ...
- 反射实现Model修改前后的内容对比 【API调用】腾讯云短信 Windows操作系统下Redis服务安装图文详解 Redis入门学习
反射实现Model修改前后的内容对比 在开发过程中,我们会遇到这样一个问题,编辑了一个对象之后,我们想要把这个对象修改了哪些内容保存下来,以便将来查看和追责. 首先我们要创建一个User类 1 p ...
- 怎样在OTN站点高速找到asm包并下载 (Oracle RAC)
怎样在OTN站点高速找到asm包并下载 ***********************************************声明******************************* ...
- EJB之JPA
在前一篇文章中大概了解了EJB是什么?那么接下来就进一步介绍一下它与JPA有什么样的关系?及什么是JPA?JPA怎样用? 一.是什么? 第一次听说JPA是在EJB视屏中,所以一直感觉他们有不解的渊源. ...
- grep结合awk简单用法
一.grep简介: grep (缩写来自Globally search a Regular Expression and Print)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行 ...
- iOS MMDrawerController源码解读(一)
提前说好,本文绝对不是教你如何使用MMDrawerController这个第三方库,因为那太多人写了 ,也太简单了.这篇文章主要带你分析MMDrawerController是怎么实现抽屉效果,明白 ...
- P1196 [NOI2002]银河英雄传说(并查集)
P1196 [NOI2002]银河英雄传说(并查集) 本题关键 用两个一维数组表示了一个稀疏的二维数组. 这两个一维数组一个表示祖先(就是最前面那个),一个表示距离祖先的距离. 并且还有一个关键点是, ...