[poj 1502]昂贵的聘礼
一道不算太难的最短路喵~
容我吐槽一下,酋长的地位居然不是最高的额——那你特么的居然还算是酋长?!
枚举一个地位区间 [i..i+M-1] 只要所有的交易者的地位都在该区间中,那么就不会引起冲突
而这个可悲的酋长是必须在区间中的,所以若酋长的地位为 L0 那么该枚举的区间就是 [L0-i, L0+M-i] {i|0<=i<=M}
然后就是裸的 dijkstra 了,取出地位在区间中的点,然后新增一个点 N+1,向所有点连边,距离是所有物品的直接价格
若 物品 i 可以通过 物品 j 来降价,那么从 j 向 i 连一条边,距离为降价后的价格
以 N+1 为源点跑一个最短路就可以了
我发现带内部调整的优先队列不是蛮好写的嘛~
#include <cstdio>
#include <cstring>
const int sizeOfPoint=;
const int sizeOfEdge=; int n;
int h[sizeOfPoint];
inline int getint();
inline void putint(int); struct edge {int point, dist; edge * next;};
edge memory[sizeOfEdge], * port=memory;
edge * e[sizeOfPoint];
inline edge * newedge(int point, int dist, edge * next)
{
edge * ret=port++;
ret->point=point; ret->dist=dist; ret->next=next;
return ret;
}
inline void link(int u, int v, int d)
{
e[u]=newedge(v, d, e[u]); e[v]=newedge(u, d, e[v]);
} struct priority_queue
{
int size, q[sizeOfPoint];
int id[sizeOfPoint];
inline int front() {return q[];}
inline bool exist(int x) {return id[x]>;}
inline void down(int i)
{
register int x=q[i];
register int j;
for (j=i<<;j<=size;i=j, j=i<<)
{
if (j<size && h[q[j+]]<h[q[j]]) j++;
if (h[q[j]]<h[x]) id[q[i]=q[j]]=i;
else break;
}
id[q[i]=x]=i;
}
inline void up(int i)
{
register int x=q[i];
register int j;
for (j=i>>;j;i=j, j=i>>)
if (h[q[j]]>h[x]) id[q[i]=q[j]]=i;
else break;
id[q[i]=x]=i;
}
inline void build(int _size)
{
size=_size;
for (int i=;i<=size;i++) id[q[i]=i]=i;
for (int i=size>>;i;i--) down(i);
}
inline void pop()
{
id[q[]]=;
id[q[]=q[size--]]=;
down();
}
inline void deskey(int x)
{
up(id[x]);
}
}; inline int min(int x, int y) {return x<y?x:y;}
inline int max(int x, int y) {return x>y?x:y;}
inline void dijkstra(); int main()
{
n=getint();
for (int i=;i<=n;i++)
for (int j=;j<i;j++)
{
int A=getint();
if (A>=) link(i, j, A);
}
memset(h, 0x3F, sizeof h); h[]=;
dijkstra(); int ans=;
for (int i=;i<=n;i++) ans=max(ans, h[i]); putint(ans); return ;
}
inline int getint()
{
register int num=;
register char ch=;
do ch=getchar(); while ((ch<'' || ch>'') && ch!='x');
if (ch=='x') return -;
do num=num*+ch-'', ch=getchar(); while (ch>='' && ch<='');
return num;
}
inline void putint(int num)
{
char stack[];
register int top=;
if (num==) stack[top=]='';
for ( ;num;num/=) stack[++top]=num%+'';
for ( ;top;top--) putchar(stack[top]);
putchar('\n');
}
inline void dijkstra()
{
priority_queue q;
q.build(n);
for ( ;q.size; )
{
int u=q.front(); q.pop();
for (edge * i=e[u];i;i=i->next) if (q.exist(i->point) && h[i->point]>h[u]+i->dist)
{
h[i->point]=h[u]+i->dist;
q.deskey(i->point);
}
}
}
本傻装B系列
[poj 1502]昂贵的聘礼的更多相关文章
- 最短路(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 昂贵的聘礼 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 昂贵的聘礼(带限制条件的dijkstra)
题目网址:http://poj.org/problem?id=1062 题目: 昂贵的聘礼 Time Limit: 1000MS Memory Limit: 10000K Total Submis ...
- POJ 1062 昂贵的聘礼 (最短路)
昂贵的聘礼 题目链接: http://acm.hust.edu.cn/vjudge/contest/122685#problem/M Description 年轻的探险家来到了一个印第安部落里.在那里 ...
- POJ 1062 昂贵的聘礼(最短路中等题)
昂贵的聘礼 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 51879 Accepted: 15584 Descripti ...
- POJ -1062 昂贵的聘礼(前向星 && SPFA)
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/u013497151/article/details/30299671 题目链接:id=1062&qu ...
随机推荐
- Apache—DBUtils框架
1.所需要jar包 commons-collections-2.1.1.jarmchange-commons-java-0.2.11.jarmysql-connector-java-5.1.18-bi ...
- linux下查看某软件是否已安装, ubuntu安装deb包
1.rpm包安装的,可以用rpm -qa看到,如果要查找某软件包是否安装,用 rpm -qa | grep “软件或者包的名字”. [root@hexuweb102 ~] rpm -qa | grep ...
- phalcon: update修改数据却变成了insert插入数据
phalcon: 在对表进行操作是,update修改数据却变成了insert插入数据. 发现,update的时,无论怎么加where都会变成了insert插入数据. 检查了一下表,原来是表没有 主键引 ...
- hdu----1686 Oulipo (ac自动机)
Oulipo Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Subm ...
- 用JDBC访问MySQL
/* 在数据库中创建一个Employee的类 create table Employee( id int primary key, name varchar(20), age int); */ imp ...
- qt5.4.0在windows,32位下的编译, vs2010平台
假设源代码入在D:\3DFrame\qt-everywhere-opensource-src-5.4.0\qt-everywhere-opensource-src-5.4.0 1:首先从官方网站下载源 ...
- osg,vtk,ogre的区别
osg使用过一年,阅读过一部分源代码,vtk也断续使用过三四年了,ogre研究的比较深入,基本上比较熟悉它的整体结构,说说个人的看法 vtk是一个算法库,里面包括了很多挺不错的算法,如果做有限元云图, ...
- 联机事务处理OLTP(on-line transaction processing)和联机分析处理OLAP(On-Line Analytical Processing)
什么是OLAP(联机分析处理)? 这个是和数据处理非常相关的一个概念.接触过BI(商务智能)的同学一定清楚. 数据处理大致可以分成两大类:联机事务处理OLTP(on-line tr ...
- js6类和对象
// 第一种:对象 var person = {};// 或者var obj = new Object(); person.name = "king"; person.age = ...
- 把DataTable中的数据拼接成XML时遇到的问题
错误信息:System.Web.Services.Protocols.SoapException: System.Web.Services.Protocols.SoapException: Serve ...