#include<iostream>
#include<stdio.h>
#define MAXN 105
#define inf 10000000
using namespace std; struct dest
{
int next;
int len;
}; struct node
{
int money;
int stat;
int dest_num;
dest coll[MAXN];
};
int give_ans(int rang_b,int rang_e);
void Dijkstra(int m,int s);
node man[MAXN];
int _m[MAXN][MAXN];
int dij[MAXN];
bool last[MAXN];
int n;
int main()
{
//freopen("acm.acm","r",stdin);
int m;
int i;
int j;
int tem;
int min;
int rang_begin;
int rang_end;
cin>>m>>n;
memset(last,false,sizeof(last));
for(i = ; i < n; ++ i)
{
cin>>man[i].money;
cin>>man[i].stat;
cin>>man[i].dest_num;
if(man[i].dest_num == )
last[i] = true;
for(j = ; j < man[i].dest_num; ++ j)
{
cin>>man[i].coll[j].next;
-- man[i].coll[j].next;
cin>>man[i].coll[j].len;
}
}
min = inf;
for(i = ; i <= m; ++ i)
{
rang_begin = man[].stat;
rang_end = rang_begin;
rang_begin -= (m - i);
rang_end += i;
// cout<<rang_begin<<" "<<rang_end<<endl;
tem = give_ans(rang_begin,rang_end);
// cout<<tem<<" 8888888888888888"<<endl;
if(tem < min)
min = tem;
//cout<<min<<endl;
}
if(min != inf)
cout<<min<<endl;
else
cout<<man[].money<<endl;
} int give_ans(int rang_b,int rang_e)
{
int i;
int j;
int _min;
for(i = ; i < n; ++ i)
{
for(j = ; j < n; ++ j)
{
_m[i][j] = inf;
}
}
for(i = ; i < n; ++ i) ///////////////敏感地区
{
if(man[i].stat >= rang_b && man[i].stat <= rang_e)
for(j = ; j < man[i].dest_num; ++ j)
{
if(man[man[i].coll[j].next].stat >= rang_b && man[man[i].coll[j].next].stat <= rang_e)
{
_m[i][man[i].coll[j].next] = man[i].coll[j].len;
// if(man[man[i].coll[j].next].dest_num == 0)
// _m[i][man[i].coll[j].next] += man[man[i].coll[j].next].money;
}
}
}
// cout<<"b dij"<<endl;
// for(i = 0; i < n; ++ i)
// {
// cout<<i<<" ";
// for(j = 0; j < n; ++ j)
// {
// if(_m[i][j] != inf)
// cout<<j<<" ";
// }
// cout<<endl;
// }
Dijkstra(n,);
// cout<<"DIJ"<<endl;
_min = inf;
for(i = ; i < n; ++ i)
{
if(dij[i] != - && dij[i] < _min)
{
_min = dij[i];
}
}
return _min;
} void Dijkstra(int m,int s)
{
int i;
int j;
int min;
int * mark = new int[m];
memset(mark,,m*sizeof(int));
memset(dij,-,sizeof(dij));
dij[s] = ;
mark[s] = ;
int x;
int k;
min = -;
for(i = ; i < m; ++ i)
{
if(_m[s][i] != inf)
dij[i] = _m[s][i];
}
for(k = ; k < m; k++)
{
min = -;
for(j = ; j < m; j++)
{
if(mark[j] == && dij[j] > )
{
if(dij[j] < min || min < )
{
min = dij[j];
x = j;
}
}
}
//cout<<"7777777777777"<<endl;
if(min == -)
break;
mark[x] = ;
for(i = ; i < m; ++ i)
{
if(mark[i] == && _m[x][i] != inf)
{ if(dij[i] < || dij[x] + _m[x][i] < dij[i])
{
dij[i] = dij[x] + _m[x][i];
}
}
}
}
for(i = ; i < m; ++ i)
{
if(dij[i] != -)
{
dij[i] += man[i].money;
// cout<<dij[i]<<" ";
}
}
// cout<<endl;
delete []mark;
}

关注我的公众号,当然,如果你对Java, Scala, Python等技术经验,以及编程日记,感兴趣的话。

技术网站地址: vmfor.com

POJ 1062的更多相关文章

  1. POJ 1062 昂贵的聘礼

    C - 昂贵的聘礼 Time Limit:1000MS     Memory Limit:10000KB     64bit IO Format:%I64d & %I64u Submit St ...

  2. 最短路(Dijkstra) POJ 1062 昂贵的聘礼

    题目传送门 /* 最短路:Dijkstra算法,首先依照等级差距枚举“删除”某些点,即used,然后分别从该点出发生成最短路 更新每个点的最短路的最小值 注意:国王的等级不一定是最高的:) */ #i ...

  3. POJ 1062 昂贵的聘礼(图论,最短路径)

    POJ 1062 昂贵的聘礼(图论,最短路径) Description 年轻的探险家来到了一个印第安部落里.在那里他和酋长的女儿相爱了,于是便向酋长去求亲.酋长要他用10000个金币作为聘礼才答应把女 ...

  4. 最短路POJ 1062 昂贵的聘礼

    C - 昂贵的聘礼 Time Limit:1000MS     Memory Limit:10000KB     64bit IO Format:%I64d & %I64u Submit St ...

  5. POJ 1062 ( dijkstra )

    http://poj.org/problem?id=1062 一个中文题,一个多月之前我做过,当时我是用搜索写的,不过苦于卡在无法确定等级关系,所以就错了. 看了别人的博客后,我还是不是很理解所谓的枚 ...

  6. POJ 1062 昂贵的聘礼 最短路 难度:0

    http://poj.org/problem?id=1062 #include <iostream> #include <cstring> #include <queue ...

  7. poj 1062(有限制的最短路)

    题目链接:http://poj.org/problem?id=1062 思路:要求对于最短路上的点,不能出现等级之差大于m,于是我们可以枚举,假设酋长的等级为level,于是这个区间范围[level- ...

  8. poj 1062 昂贵的聘礼(最短路 dijk+枚举)

    终于A 了,这题做着真麻烦 题目:http://poj.org/problem?id=1062 dijk 一般用于正权有向图 此题的关键在于等级限制的处理,最好的办法是采用枚举,即假设酋长等级为5,等 ...

  9. (最短路 dijkstra)昂贵的聘礼 -- poj -- 1062

    链接: http://poj.org/problem?id=1062 昂贵的聘礼 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions ...

  10. poj 1062 昂贵的聘礼 (dijkstra最短路)

    题目链接:http://poj.org/problem?id=1062 昂贵的聘礼 Time Limit: 1000MS   Memory Limit: 10000K Total Submission ...

随机推荐

  1. Windows游戏找不到了怎么办?

         大家有的时候,可能是不慎操作,或是某些新装的Windows,会发现那些经典的游戏不见了,那它们去哪了呢?是长腿跑了?还是Windows偷工减料?都不是,让巩固来教你们把他们找出来! 1.在开 ...

  2. 2018.06.29 NOIP模拟 繁星(前缀和)

    繁星 [问题描述] 要过六一了,大川正在绞尽脑汁想送给小伙伴什么礼物呢.突然想起以前拍过一张夜空中的繁星的照片,这张照片已经被处理成黑白的,也就是说,每个像素只可能是两个颜色之一,白或黑.像素(x,y ...

  3. 2018.09.12 poj2376Cleaning Shifts(线段树+简单dp)

    传送门 貌似贪心能过啊%%%. 本蒟蒻写的线段树优化dp. 式子很好推啊. f[i]表示覆盖1~i所需的最小代价. 那么显然对于一个区间[li,ri]" role="present ...

  4. ansible-api 调试

    使用api的时候有时候会遇到一些难以想象到的错误,可以通过以下几种方式来定位. 1.使用 自定义 callback class ResultCallback(CallbackBase): def v2 ...

  5. 01-html和head介绍

    一.web标准 web准备介绍: w3c:万维网联盟组织,用来制定web标准的机构(组织) web标准:制作网页遵循的规范 web准备规范的分类:结构标准.表现标准.行为标准. 结构:html.表示: ...

  6. cuDNN

    https://developer.nvidia.com/developer-program https://developer.nvidia.com/cudnn cuda和cuDNN的关系 http ...

  7. Spring注解使用和与配置文件的关系

      Spring注解使用和与配置文件的关系 1 注解概述与容器管理机制 Spring 2.5 中除了提供 @Component 注释外,还定义了几个拥有特殊语义的注释,它们分别是:@Repositor ...

  8. Delphi for iOS开发指南(5):在iOS应用程序中使用Calendar组件来选择日期

    http://blog.csdn.net/delphiteacher/article/details/8923519 在FireMonkey iOS应用程序中的Calendar FireMonkey使 ...

  9. Checkpoint--在Tempdb上的特殊性

    由于Checkpoint的目的是为减少数据库恢复时间,而每次实例重启都会创建新的tempdb,而不需要恢复,因此checkpoint在Tempdb上行为与其他用户数据库上略微不同. 1. 系统引发的c ...

  10. javascript快速排序的思考

    还记得三个月前,学习过快速排序,示例所讲的python快速排序十分易于理解,然而网上学习的c#的快速排序当时就懵逼的,现在已经全忘了,大概记得个思路 在学习完了一些高级的js方法后,今天用js模拟了p ...