#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. VMware + LInux + Xshell 连接环境设置(心得体会)

    准备好VMware软件,和Linux 和xshell三款软件,下载和安装好,这里VMware是十二,Linux是CentOs 6 ,xshell是5 其实没有什么区别只要版本兼容就行,我们就可以实现远 ...

  2. android中Actionbar详解

    1.什么是Action BarAction Bar被认为是新版Android系统中最重要的交互元素,在程序运行中一直置于顶部,主要起到的作用在于:1)突出显示一些重要操作(如“最新”.“搜索”等)2) ...

  3. hdu 4957 贪心破木桶接水大trick

    http://acm.hdu.edu.cn/showproblem.php?pid=4957 拿n只破的木桶去接水,每只木桶漏水速度为a[i],最后要得到b[i]单位的水,自来水的出水速度为V,木桶里 ...

  4. 洛谷P3066 [USACO12DEC]逃跑的Barn (线段树合并)

    题目描述It's milking time at Farmer John's farm, but the cows have all run away! Farmer John needs to ro ...

  5. 洛谷P3567[POI2014]KUR-Couriers(主席树+二分)

    题意:给一个数列,每次询问一个区间内有没有一个数出现次数超过一半 题解: 最近比赛太多,都没时间切水题了,刚好日推了道主席树裸题,就写了一下 然后 WA80 WA80 WA0 WA90 WA80 ?? ...

  6. java对redis的基本操作(一)

    一.server端安装 1.下载 https://github.com/MSOpenTech/redis 可看到当前可下载版本:redis2.6

  7. Java类与类之间的继承关系

    Java父类与子类继承关系,调用的各种关系 示例一(子类调用父类函数): // 定义一类 A public class A { // 此方法打印一句话 public void a() { System ...

  8. GitHub Android 开源项目汇总 (转)

    转自:http://blog.csdn.net/ithomer/article/details/8882236 GitHub 上的开源项目不胜枚举,越来越多的开源项目正在迁移到GitHub平台上.基于 ...

  9. westrac server security configure user info

    security userkey:westracpass:Set#@!123

  10. js中的基本类型与引用类型学习

    一.基本数据类型 ECMAScript 有 5 种原始类型(primitive type),即 Undefined.Null.Boolean.Number 和 String,也称为基本数据类型,ES6 ...