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第一次遇到中文题,好吧,虽然语言通了,我一开始也没看懂样例什么意思,题意的话就是说这个探险家想娶酋长的女儿,但是没有钱,酋长说他可以用祭司的水晶球或者皮袄来换取少花一部分钱,同 ...
随机推荐
- LSM存储模型
LSM存储模型 数据库有3种基本的存储引擎: 哈希表,支持增.删.改以及随机读取操作,但不支持顺序扫描,对应的存储系统为key-value存储系统.对于key-value的插入以及查询,哈希表的复杂度 ...
- Linux服务器管理: 系统的定时任务crond
cornd 是定时任务的守护进程 这个服务系统是默认启动的 [root@localhost/]#/etc/init.d/crond strat|restart|stop [root@localhos ...
- 设置二级域名共享一级域名Cookie和删除共享Cookie
设置共享Cookie: 二级域名要想共享一级域名的cookie,只需要设置cookie.Domain = ".一级域名.com"; 删除共享Cookie: HttpCook ...
- 【AngularJS】—— 4 表达式
前面了解了AngularJS的基本用法,这里就跟着PDF一起学习下表达式的相关内容. 在AngularJS中的表达式,与js中并不完全相同. 首先它的表达式要放在{{}}才能使用,其次相对于javas ...
- NFS服务器简介
1.NFS为Network File System(网络文件系统):不同机器不同的操作系统可以彼此共享数据文件. NFS的配置简单,启动remote procedure call(RPC, ...
- HDU 2014
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> typedef float ElementType; void Select_Sort ...
- CodeForces 55D Beautiful numbers
D. Beautiful numbers time limit per test 4 seconds memory limit per test 256 megabytes input standar ...
- tc 147 2 PeopleCircle(再见约瑟夫环)
SRM 147 2 600PeopleCircle Problem Statement There are numMales males and numFemales females arranged ...
- JAVA 笔记
一.Java基础以及面向对象编程1.float类型的数自动转换成double类型时,可能会出现前后不相等的情况,因为有些数不能够用有限的二进制位精确表示.2.右移>>右移,左边空出位以符号 ...
- iOS resign code with App Store profile and post to AppStore
http://stackoverflow.com/questions/17545452/ios-resign-code-with-app-store-profile-and-post-to-appst ...