POJ 1062 ( dijkstra )
http://poj.org/problem?id=1062
一个中文题,一个多月之前我做过,当时我是用搜索写的,不过苦于卡在无法确定等级关系,所以就错了。
看了别人的博客后,我还是不是很理解所谓的枚举等级是怎样枚举,因为我觉得在递归的时候,我真的不知道怎么枚举等级。
然后今天在看到了一个人写的,枚举等级怎么枚举,我才发现我用那个搜索写的话,我还是有问题。所以我就用这个新学的dijkstra写
所谓的枚举等级,就是以每一个等级都视为最低等级来进行枚举。
比如等级限制1,而那个酋长的等级是3,那么你就应该枚举2-4,和3-5的等级的人。
#include <stdio.h>
#include <string.h> #define inf 9999999 int m,n;
int price[],d[];
int graph[][];
int rank[];
bool mark[],limit[]; int dijkstra()
{
int result = inf;
int k,dis;
memset(mark,false,sizeof(mark));
d[ ] = ;
for(int i = ; i <= n ; i++)
d[ i ] = inf;
for(int i = ; i <= n ; i++) //dijkstra是这个循环
{
k = ;
dis = inf;
for(int j= ; j <= n ;j++)
if(!mark[ j ] && d[ j ] <= dis && limit[ j ])
{
k = j;
dis = d[ j ];
}
mark[ k ] = true;
for(int j = ; j <= n ; j++)
{
if(limit[ j ] && d[ j ] > d[ k ] + graph[ k ][ j ])
d[ j ] = d[ k ] + graph[ k ][ j ];
}
}
for(int i = ;i <= n ;i++)
{
d[ i ] += price[ i ]; //d[i] 是存储着交换i次后的价钱。
if(d[ i ] < result)
result = d[ i ];
}
return result;
} int main()
{
int x,t,v,ans = inf;
scanf("%d%d",&m,&n);
for(int i = ; i <= n ; i++) //进行构图。
for(int j = ;j <= n ; j++)
if( i == j )
graph[ i ][ j ] = ;
else
graph[ i ][ j ] = inf;
for(int i = ; i <= n ; i++)
{
scanf("%d%d%d",&price[i],&rank[i],&x);
for(int j = ; j < x ; j++)
{
scanf("%d%d",&t,&v);
graph[ i ][ t ] = v;
}
}
for(int i = ; i <= m ; i++) //这里就是枚举等级,把可以和酋长交换的人进行标记,然后进行最短路的寻找。
{
memset(limit,,sizeof(limit));
for(int j = ; j <= n ; j++)
if(rank[ j ] >= rank[ ] - m + i && rank[ j ] <= rank[ ] + i)
limit[ j ] = true;
t = dijkstra();
if(ans > t)
ans = t;
}
printf("%d\n",ans);
return ;
}
POJ 1062 ( dijkstra )的更多相关文章
- 昂贵的聘礼 - poj 1062 (Dijkstra+枚举)
Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 39976 Accepted: 11596 Description 年 ...
- 最短路(Dijkstra) POJ 1062 昂贵的聘礼
题目传送门 /* 最短路:Dijkstra算法,首先依照等级差距枚举“删除”某些点,即used,然后分别从该点出发生成最短路 更新每个点的最短路的最小值 注意:国王的等级不一定是最高的:) */ #i ...
- POJ 1062 昂贵的聘礼
C - 昂贵的聘礼 Time Limit:1000MS Memory Limit:10000KB 64bit IO Format:%I64d & %I64u Submit St ...
- POJ 1062 昂贵的聘礼(图论,最短路径)
POJ 1062 昂贵的聘礼(图论,最短路径) Description 年轻的探险家来到了一个印第安部落里.在那里他和酋长的女儿相爱了,于是便向酋长去求亲.酋长要他用10000个金币作为聘礼才答应把女 ...
- 最短路POJ 1062 昂贵的聘礼
C - 昂贵的聘礼 Time Limit:1000MS Memory Limit:10000KB 64bit IO Format:%I64d & %I64u Submit St ...
- (最短路 dijkstra)昂贵的聘礼 -- poj -- 1062
链接: http://poj.org/problem?id=1062 昂贵的聘礼 Time Limit: 1000MS Memory Limit: 10000K Total Submissions ...
- poj 1062 昂贵的聘礼 (dijkstra最短路)
题目链接:http://poj.org/problem?id=1062 昂贵的聘礼 Time Limit: 1000MS Memory Limit: 10000K Total Submission ...
- POJ 1062 昂贵的聘礼(带限制条件的dijkstra)
题目网址:http://poj.org/problem?id=1062 题目: 昂贵的聘礼 Time Limit: 1000MS Memory Limit: 10000K Total Submis ...
- POJ 1062 昂贵的聘礼(Dijkstra)
题意 : 真真是做POJ第一次遇到中文题,好吧,虽然语言通了,我一开始也没看懂样例什么意思,题意的话就是说这个探险家想娶酋长的女儿,但是没有钱,酋长说他可以用祭司的水晶球或者皮袄来换取少花一部分钱,同 ...
随机推荐
- redis入侵小结
redis安装: windows安装包:http://pan.baidu.com/s/1i3jLlC5 下载下来之后,开始安装: redis-server.exe redis.conf: 简单一步,安 ...
- 整理一下Entity Framework的查询
整理一下Entity Framework的查询 2012-08-30 13:41:59 标签:Entity Framework 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信 ...
- Guid.NewGuid()
System.Guid.NewGuid().ToString()全球唯一标识符 (GUID) 是一个字母数字标识符,用于指示产品的唯一性安装.在许多流行软件应用程序(例如 Web 浏览器和媒体播放器) ...
- MV*模式的个人理解
MV*模式主要解决的问题就是 View代码难以维护的问题. MV*模式将View中的逻辑分离出去,形成一个弱逻辑的易于维护的视图. MV*中的*是Model和View的桥梁,负责保持Model和Vie ...
- android-解决EditText的inputType为Password时, 字体不一致的问题
今天做项目的时候,发现当edittext 的InputType为password时,它的字体和原来不一样: 网上找了一下,给出了解决办法: 第一: 去掉xml文件中的password配置,在代码中编写 ...
- 如何快速有效的修改java的环境变量
之前已经修改过jdk的环境变量,,,,在/etc/profile下,,, export JAVA_HOME=/usr/java/jdk1.7.0_67-cloudera export PATH=${J ...
- rehat 出现GDB debuginfo-install 问题处理
本人使用rhel 6 GDB 调试代码时,出现以下错误: Missing separate debuginfos, use: debuginfo-install glibc-2.12-1.166 ...
- alter和alert防错?
在js中这个错误经常容易犯, 那就是 alter 和 alert这两个单词经常写错. 导致js出错, 而不执行! 注意: 在js脚本中, 是 alert 弹出提示框, 而不是 alter ,js中没有 ...
- smarty string_format用法 取小数点后2位
<{if $d.ul_pv}> <{$d.sum/$d.ul_pv|string_format:'%.2f'}> <{else}> 0.00 <{/if}&g ...
- php 经典的算法题你懂的
有5个人偷了一堆苹果,准备在第二天分赃.晚上,有一人遛出来,把所有菜果分成5份,但是多了一个,顺手把这个扔给树上的猴了,自己先拿1/5藏了.没想到其他四人也都是这么想的,都如第一个人一样分成5份把多的 ...