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 ...
随机推荐
- Angular CLI: 1.6.7 入门
当你使用npm或者yarn也安装不了angular-cli时,请使用淘宝镜像. Step1 npm i -g cnpm --registry=https://registry.npm.taobao.o ...
- 贪吃蛇 c++ ncurses
近期学ncurses.用贪吃蛇训练下 思路:不构造链表.蛇头向前进方向打点,蛇尾逐点消失,形成移动. 须要记录蛇头方向,蛇尾方向.并用list仿造队列,增加拐点信息(空间比链表每一个结点开辟空间节省非 ...
- Alluxio增强Spark和MapReduce存储能力
Alluxio的前身为Tachyon.Alluxio是一个基于内存的分布式文件系统:Alluxio以内存为中心设计,他处在诸如Amazon S3. Apache HDFS 或 OpenStack Sw ...
- Boss OpenCart 商城自适应主题模板 ABC-0012-01
Boss OpenCart 商城自适应主题模板 ABC-0012-01 模板特性兼容浏览器IE7, IE8, IE9, IE10, Firefox, Safari, Chrome OpenCart版本 ...
- div拖拽缩放jquery插件编写——带8个控制点
项目中需要对div进行拖拽缩放,需要有控制面板8个控制点的那种,原以为这么常见的效果应该能搜索到很多相关插件,然而可以完成拖拽的实繁,却找不到我想要的,还是自己动手丰衣足食吧 效果预览(只支持pc端) ...
- bug统计分析续(一)基于SQL的Bug统计方法
本文由 @lonelyrains 出品.转载请注明出处. 文章链接: http://blog.csdn.net/lonelyrains/article/details/44225533 上一篇为 bu ...
- 【codevs2183】匹配字符串
KMP裸题 #include<algorithm> #include<iostream> #include<cstdlib> #include<cstring ...
- 大文本 通过 hadoop spark map reduce 获取 特征列 的 属性值 计算速度
大文本 通过 hadoop spark map reduce 获取 特征列 的 属性值 计算速度
- XMU 1040 Schedule 【拓扑排序】
1040: Schedule Time Limit: 500 MS Memory Limit: 64 MBSubmit: 12 Solved: 2[Submit][Status][Web Boar ...
- javascript学习---BOM
1.top是顶级的框架,也就是浏览器窗口. 2.window.close()只能关闭window.open()打开的窗口. 3.firefox不支持修改状态栏,firefox3后强制始终在弹出窗口中显 ...