poj 1062 昂贵的聘礼(最短路 dijk+枚举)
终于A 了,这题做着真麻烦
题目:http://poj.org/problem?id=1062
dijk 一般用于正权有向图
此题的关键在于等级限制的处理,最好的办法是采用枚举,即假设酋长等级为5,等级限制为2,那么需要枚举等级从3~5,4~6,5~7
题意就不用说了,做poj以来的第一道中文题目。
要考虑间接身份差异不可行的情况
如:1 4
10000 3 2
2 1
3 3
1000 2 2
4 1
3 1
1000 3 1
4 2
100 4 0
错误程序出104,答案105。
对于这组数据错误的程序是4->3->2->1的,但4和2不能并存
#include <iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<stack>
#include<queue>
#include<cmath>
#include<algorithm>
using namespace std; int lim[];
const int INF=<<;
int n;
struct no
{
int p,l,x,a[],b[];
} thing[]; struct node
{
int u,v,w,next;
} edge[];
int head[],dis[],cnt;
void add(int u,int v,int w)
{
edge[cnt].u=u;
edge[cnt].v=v;
edge[cnt].w=w;
edge[cnt].next=head[u];
head[u]=cnt++;
} int dijkstra(int s)
{
int vis[],i,j,min;
for(i=; i<=n; i++)
dis[i]=INF;
memset(vis,,sizeof(vis));
dis[s]=;
for(i=; i<=n; i++)
{
int minn=INF;
int u=s;
for(j=; j<=n; j++)
{
if(!vis[j] && minn>dis[j] &&lim[j]) //lim标记是否在限制条件内
{
minn=dis[j];
u=j;
}
}
for(j=head[u]; j!=-; j=edge[j].next)
{
int v=edge[j].v;
int newdis=minn+edge[j].w;
if(!vis[v] && newdis < dis[v] && lim[v])//lim标记是否在限制条件内
dis[v]= newdis;
}
vis[u]=;
}
min=thing[].p;
for(i=; i<=n; i++) //一组完成后 比较
{
if(dis[i]+thing[i].p<min)
min=dis[i]+thing[i].p;
}
return min;
}
int main()
{
int m,i,j,ans;
scanf("%d%d",&m,&n);
cnt=;
memset(head,-,sizeof(head));
for(i=; i<=n; i++)
{
scanf("%d%d%d",&thing[i].p,&thing[i].l,&thing[i].x);
for(j=; j<=thing[i].x; j++)
{
scanf("%d%d",&thing[i].a[j],&thing[i].b[j]);
}
}
for(i = ; i <= n; i++) //其实我这一步没什么必要,当时想少了,下一步就可以搞定
{
for(j=; j<=thing[i].x; j++)
{
if(abs(thing[i].l-thing[thing[i].a[j]].l)<=m)
add(i,thing[i].a[j],thing[i].b[j]);//倒着建的图
}
}
ans=thing[].p;
for(i=m; i>=; i--)
{
memset(lim,,sizeof(lim));
for(j=; j<=n; j++) //枚举
{
if(thing[j].l>=(thing[].l-i)&&thing[j].l<=(thing[].l+m-i))
lim[j]=;
}
if(dijkstra()<ans)
ans=dijkstra();
}
printf("%d\n",ans);
return ;
}
poj 1062 昂贵的聘礼(最短路 dijk+枚举)的更多相关文章
- POJ - 1062 昂贵的聘礼(最短路Dijkstra)
昂贵的聘礼 Time Limit: 1000MS Memory Limit: 10000KB 64bit IO Format: %I64d & %I64u SubmitStatus Descr ...
- POJ 1062 昂贵的聘礼 最短路 难度:0
http://poj.org/problem?id=1062 #include <iostream> #include <cstring> #include <queue ...
- POJ 1062 昂贵的聘礼 最短路+超级源点
Description 年轻的探险家来到了一个印第安部落里.在那里他和酋长的女儿相爱了,于是便向酋长去求亲.酋长要他用10000个金币作为聘礼才答应把女儿嫁给他.探险家拿不出这么多金币,便请求酋长降低 ...
- poj 1062 昂贵的聘礼 最短路 dijkstra
#include <cstdio> #include <cmath> #include <cstring> #include <ctime> #incl ...
- 最短路(Dijkstra) POJ 1062 昂贵的聘礼
题目传送门 /* 最短路:Dijkstra算法,首先依照等级差距枚举“删除”某些点,即used,然后分别从该点出发生成最短路 更新每个点的最短路的最小值 注意:国王的等级不一定是最高的:) */ #i ...
- POJ 1062 昂贵的聘礼(图论,最短路径)
POJ 1062 昂贵的聘礼(图论,最短路径) Description 年轻的探险家来到了一个印第安部落里.在那里他和酋长的女儿相爱了,于是便向酋长去求亲.酋长要他用10000个金币作为聘礼才答应把女 ...
- poj 1062 昂贵的聘礼 (dijkstra最短路)
题目链接:http://poj.org/problem?id=1062 昂贵的聘礼 Time Limit: 1000MS Memory Limit: 10000K Total Submission ...
- 最短路POJ 1062 昂贵的聘礼
C - 昂贵的聘礼 Time Limit:1000MS Memory Limit:10000KB 64bit IO Format:%I64d & %I64u Submit St ...
- POJ 1062 昂贵的聘礼 (最短路)
昂贵的聘礼 题目链接: http://acm.hust.edu.cn/vjudge/contest/122685#problem/M Description 年轻的探险家来到了一个印第安部落里.在那里 ...
- poj 1062 昂贵的聘礼 (有限制的最短路)
昂贵的聘礼 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 56594 Accepted: 17083 Descripti ...
随机推荐
- PHP通过IP 获取 地理位置(实例代码)
发布:JB02 来源:脚本学堂 分享一例php代码,实现通过IP地址获取访问者的地理位置,在php编程中经常用到,有需要的朋友参考下吧.本节内容:PHP通过IP获取地理位置 例子: 复制代码代码示 ...
- mysql之创建外键报150错误的处理方法
这几天由于在赶项目进度,也就没有及时记录下自己的学习情况 ,在完成项目的这段时间里,碰到了很多问题,在解决问题的过程中学习了不少技巧. 这里就主要介绍一下在mysql数据库中为表之间建立外键时报100 ...
- 爬虫学习之基于Scrapy的网络爬虫
###概述 在上一篇文章<爬虫学习之一个简单的网络爬虫>中我们对爬虫的概念有了一个初步的认识,并且通过Python的一些第三方库很方便的提取了我们想要的内容,但是通常面对工作当作复杂的需求 ...
- splObjectStroge的作用,实例化一个数组
PHP SPL SplObjectStorage是用来存储一组对象的,特别是当你需要唯一标识对象的时候. PHP SPL SplObjectStorage类实现了Countable,Iterator, ...
- response 后刷新页面,点击按钮后,禁用该按钮
一,正常的点击按钮后,将其灰显,全部执行完毕再正常显示. this.btnSave.Attributes.Add("onclick", "if (typeof(Page_ ...
- git操作技巧(转载)
转载自:https://segmentfault.com/q/1010000000181403 git支持很多种工作流程,我们采用的一般是这样,远程创建一个主分支,本地每人创建功能分支,日常工作流程如 ...
- 用于软件包管理的21个Linux YUM命令
FROM:http://os.51cto.com/art/201309/411895.htm YUM(Yellowdog Updater Modified)是一款开源命令行及图形化软件包管理工具,面向 ...
- (转)深入理解SP、LR和PC
网址:http://blog.csdn.net/zhou1232006/article/details/6149548 深入理解ARM的这三个寄存器,对编程以及操作系统的移植都有很大的裨益. 1.堆栈 ...
- 应该如何入门deep learning呢?从UFLDL开始!
抱歉,大家,这里不是要分享如何学习deep learning,而是想要记录自己学习deep learning的小历程,算是给自己的一点小动力吧,希望各位业内前辈能够多多指教! 看到有网友提到,Andr ...
- Object-C单元测试&MOCK(摘录精选)
断言测试类型: 下面一共18个断言(SDK中也是18个,其含义转自ios UnitTest 学习笔记,真心佩服原文的博主): XCTFail(format…) 生成一个失败的测试: XCTAssert ...