POJ1062 昂贵的聘礼(最短路)
题目链接。
分析:
一开始以为简单的DFS,直接做,MLE了。
本体应该用最短路径(Dijkstra算法)做。
此题的关键在于等级限制的处理,采用枚举,即假设酋长等级为5,等级限制为2,那么需要枚举等级从3~5,4~6,5~7
从满足改等级范围的结点组成的子图中用Dijkstra来算出最短路径,最后求出最小值。
AC代码如下:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <queue> using namespace std; const int maxn = +;
const int INF = (<<); int G[maxn][maxn], level[maxn], val[maxn], n, d[maxn];
bool lim[maxn]; int dijkstra() {
bool vis[maxn];
memset(vis, false, sizeof(vis)); for(int i=; i<=n; i++) d[i] = INF;
d[] = ; for(int i=; i<n; i++) {
int m = INF, x;
for(int y=; y<=n; y++) if(!vis[y] && lim[y] && m >= d[y]) m = d[x=y];
vis[x] = true;
for(int y=; y<=n; y++) if(!vis[y] && lim[y] && d[y]>d[x]+G[x][y]) d[y] = d[x]+G[x][y];
} int ans = INF;
for(int i=; i<=n; i++) {
d[i] += val[i];
ans = min(ans, d[i]);
}
return ans;
} int main() {
int p, l, x, t, v;
int m;
//freopen("my.txt", "r", stdin);
while(scanf("%d%d", &m,&n) == ) {
for(int i=; i<=n; i++) {
for(int j=; j<=n; j++) {
G[i][j] = INF;
}
} for(int i=; i<=n; i++) {
scanf("%d%d%d", &p, &l, &x);
val[i] = p; level[i] = l; for(int j=; j<x; j++) {
scanf("%d%d", &t, &v);
G[i][t] = v;
}
} int ans = INF; for(int i=; i<=m; i++) {
memset(lim, false, sizeof(lim));
for(int j=; j<=n; j++) {
if(level[j] >= level[]-m+i && level[j] <= level[]+i) lim[j] = true;
} ans = min(ans, dijkstra());
} printf("%d\n", ans);
} return ;
}
MLE代码也贴下。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <queue> using namespace std; const int maxn = +; struct Edge {
int nu, p, next;
}ed[]; struct node {
int p, l;
int next;
}head[maxn]; int mem, m; void add(int u, int v, int p) {
ed[mem].nu = v;
ed[mem].p = p;
ed[mem].next = head[u].next;
head[u].next = mem++;
}; int dfs(int u, int minv, int maxv) { int ans = head[u].p; for(int i=head[u].next; i != -; i = ed[i].next) {
int nmin = min(minv, head[ed[i].nu].l);
int nmax = max(maxv, head[ed[i].nu].l);
if(nmax - nmin > m) continue;
if(ed[i].p >= ans) continue;
ans = min(ans, ed[i].p + dfs(ed[i].nu, nmin, nmax));
} return ans;
} int main() {
int n;
int p, l, x, nu; //freopen("my.txt", "r", stdin);
while(scanf("%d%d", &m,&n) == ) {
mem = ; for(int i=; i<=n; i++) {
scanf("%d%d%d", &p, &l, &x); head[i].p = p; head[i].l = l; head[i].next = -; for(int j=; j<x; j++) {
scanf("%d%d", &nu, &p);
add(i, nu, p);
}
} printf("%d\n", dfs(, head[].l, head[].l));
} return ;
}
POJ1062 昂贵的聘礼(最短路)的更多相关文章
- POJ1062昂贵的聘礼[最短路建模]
昂贵的聘礼 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 45892 Accepted: 13614 Descripti ...
- POJ-1062 昂贵的聘礼( 最短路 )
题目链接:http://poj.org/problem?id=1062 Description 年轻的探险家来到了一个印 第安部落里.在那里他和酋长的女儿相爱了,于是便向酋长去求亲.酋长要他用1000 ...
- POJ-1062 昂贵的聘礼 (最短路)
POJ-1062 昂贵的聘礼:http://poj.org/problem?id=1062 题意: 有一个人要到1号点花费最少的钱,他可以花费一号点对应的价格,也可以先买下其他一些点,使得费用降低. ...
- [poj1062]昂贵的聘礼_最短路_离散化
昂贵的聘礼 poj-1062 题目大意:原文链接?不是英文题,自己看 注释:$1\le N \le 100$. 想法:开始的想法有些过于简单,因为落下了一个条件:就是等级限制是一条路径上的任意两点而不 ...
- POJ1062昂贵的聘礼(经典) 枚举区间 +【Dijkstra】
<题目链接> 昂贵的聘礼 Description 年轻的探险家来到了一个印第安部落里.在那里他和酋长的女儿相爱了,于是便向酋长去求亲.酋长要他用1000 ...
- POJ - 1062 昂贵的聘礼(最短路Dijkstra)
昂贵的聘礼 Time Limit: 1000MS Memory Limit: 10000KB 64bit IO Format: %I64d & %I64u SubmitStatus Descr ...
- POJ1062昂贵的聘礼(dijkstra)
昂贵的聘礼 题目大意是说有N个物品,每个物品都有自己的价格,但同时某些物品也可以由其他的(可能不止一个)替代品,这些替代品的价格比较“优惠”,问怎么样选取可以让你的花费最少来购买到物品1 由于有N个物 ...
- POJ1062 昂贵的聘礼 【DFS】
昂贵的聘礼 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 37475 Accepted: 10816 Descripti ...
- ACM/ICPC 之 昂贵的聘礼-最短路解法(POJ1062)
//转移为最短路问题,枚举必经每一个不小于酋长等级的人的最短路 //Time:16Ms Memory:208K #include<iostream> #include<cstring ...
随机推荐
- Team Foundation Server 2013 with Update 3 Install LOG
[Info @10:14:58.155] ====================================================================[Info @ ...
- CentOS 安装 Tomcat
1.Tomcat官网获(http://tomcat.apache.org/)取tar.gz文件的下载地址 2.下载: # wget http://apache.fayea.com/tomcat/tom ...
- (五)带属性值的ng-app指令,实现自己定义模块的自己主动载入
如今我们看下怎样使用带属性值的ng-app命令,让ng-app自己主动载入我们自己定义的模块作为根模块. <!DOCTYPE html> <html> <head> ...
- 传感器 Sensor 加速度【示例】
简介 坐标系 x轴:从左到右 y轴:从下到上 z轴:从内到外 这个坐标系与Android 2D API中的不同,传感器中的返回值都以此坐标系为准. SENSOR_TYPE_ACCELEROMETER ...
- sql server 2008 评估期已过期
解决办法: 修改注册表: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\100\ConfigurationState里的&quo ...
- JavaScript回调函数的理解
这里是个人对回调函数的一段理解 <!DOCTYPE html> <html> <head> <title>回调函数</title> < ...
- lucene查询排序结果原理总结
参考文章 Lucene3.0结果排序原理+操作+示例 Lucene的排序算法 一句话总结lucene排序算法是什么样的 关键几个概念 参考文档: http://lucene.apache.org/co ...
- IIS 配置好了,为什么网站打开一片空白?
方法如下: 进入:控制面板 - 卸载程序 - 打开或关闭Windows功能 如果访问任何不存在页面或页面出错时空白: Internet 信息服务 - 万维网服务 - 常见 HTTP 功能 - HTTP ...
- 黑马程序员-hashtable
散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构.也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度.这个映射函数叫做散列 ...
- NPM环境搭建
1. NPM全局路径:配置npm包的安装位置,在你的用户文件夹下,新建.npmrc文件:cache=D:\NodeJs\nvm\npm-cache 表示缓存文件夹 prefix=D:\NodeJs\n ...