POJ 1062
#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的更多相关文章
- POJ 1062 昂贵的聘礼
C - 昂贵的聘礼 Time Limit:1000MS Memory Limit:10000KB 64bit IO Format:%I64d & %I64u Submit St ...
- 最短路(Dijkstra) POJ 1062 昂贵的聘礼
题目传送门 /* 最短路:Dijkstra算法,首先依照等级差距枚举“删除”某些点,即used,然后分别从该点出发生成最短路 更新每个点的最短路的最小值 注意:国王的等级不一定是最高的:) */ #i ...
- POJ 1062 昂贵的聘礼(图论,最短路径)
POJ 1062 昂贵的聘礼(图论,最短路径) Description 年轻的探险家来到了一个印第安部落里.在那里他和酋长的女儿相爱了,于是便向酋长去求亲.酋长要他用10000个金币作为聘礼才答应把女 ...
- 最短路POJ 1062 昂贵的聘礼
C - 昂贵的聘礼 Time Limit:1000MS Memory Limit:10000KB 64bit IO Format:%I64d & %I64u Submit St ...
- POJ 1062 ( dijkstra )
http://poj.org/problem?id=1062 一个中文题,一个多月之前我做过,当时我是用搜索写的,不过苦于卡在无法确定等级关系,所以就错了. 看了别人的博客后,我还是不是很理解所谓的枚 ...
- POJ 1062 昂贵的聘礼 最短路 难度:0
http://poj.org/problem?id=1062 #include <iostream> #include <cstring> #include <queue ...
- poj 1062(有限制的最短路)
题目链接:http://poj.org/problem?id=1062 思路:要求对于最短路上的点,不能出现等级之差大于m,于是我们可以枚举,假设酋长的等级为level,于是这个区间范围[level- ...
- poj 1062 昂贵的聘礼(最短路 dijk+枚举)
终于A 了,这题做着真麻烦 题目:http://poj.org/problem?id=1062 dijk 一般用于正权有向图 此题的关键在于等级限制的处理,最好的办法是采用枚举,即假设酋长等级为5,等 ...
- (最短路 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 ...
随机推荐
- Devexpress VCL Build v2014 vol 14.1.4 发布
虽然这次没加什么新东西,但是及时更新支持xe7,还算可以. What's New in 14.1.4 (VCL Product Line) New Major Features in 14.1 W ...
- 2018.08.22 codves2370 小机房的树(lca+树上差分)
传送门 一道板子题. 直接树链剖分维护树上lca然后差分就行了. 代码: #include<bits/stdc++.h> #define N 50005 #define lc (p< ...
- hdu-1066(大数)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1066 思路:统计2的个数,如果遇到5,就抵消,最后求和加上为来得及抵消的2的个数. 参考文章:http ...
- Android继承BaseAdapter时要重写的函数的说明
原文来自:http://www.2cto.com/kf/201405/299601.html,我自己做了一些修改 Android中继承BaseAdapter后需要重写四个函数,但一般还要写一个构造函数 ...
- 【科普】Web(瓦片)地图的工作原理
[译者按:在看MapBox Guides文档时,看到这篇 How do web maps work?,这篇文档通俗易懂地阐述了Web地图是如何工作的,其实更偏向讲瓦片地图的工作原理,鉴于之前很多人不了 ...
- web api解决序列化后返回标准时间带T问题
添加类: public class JsonDataTimeConverter:IsoDateTimeConverter { public JsonDataTimeConvert ...
- java:从消息机制谈到观察者模式
从简单的例子开始 同样,我们还是先看一个简单例子:创建一个窗口实现加法的计算功能.其效果如下: 图1: 加法计算 Calculator.java: import javax.swing.*; impo ...
- 限制用户不能删除SharePoint列表中的条目(项目)
概述 SharePoint列表提供了一个用于在线协作的电子表格,不同的用户可以同时在不同的地方编辑一套数据. 列表功能在收集用户信息.提供审批流程方面为办公人员提供了非常便捷的好处. 既然是协作办公, ...
- Node.js-Usage & Example
Usage# node [options] [v8 options] [script.js | -e "script"] [arguments] Please see the Co ...
- Winform 搭建http服务器
using System; using System.Collections; using System.IO; using System.Net; using System.Net.Sockets; ...