Hdu 5361 In Touch (dijkatrs+优先队列)
题目链接:
题目描述:
有n个传送机排成一排,编号从1到n,每个传送机都可以把自己位置的东西传送到距离自己[l, r]距离的位置,并且花费c,问从1号传送机到其他传送机的最小花费是多少??
解题思路:
看了题解发现是dijkstra(求最短单源路径)+并查集(优化),刚开始的时候并不知道怎么用并查集优化,然后就提交了一个没有并查集的代码,果断TLE。然后开始搜代码,突然惊叹真是优化的太美妙。因为每次从队列中取出的都是最优的,所以更新dis的时候可以直接把这些点合并,下次再遇到这些点的时候没必要更新就直接跳过。(在这里要特别谢谢为我debug快要疯了的天I火聚聚)
#include <cmath>
#include <queue>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long LL;
const LL INF = 1LL<<;
const int maxn = ;
struct node
{
int x;
LL dis;
node (int a, LL b):x(a),dis(b){}
friend bool operator < (node a, node b)
{
return a.dis > b.dis;
}
};
int l[maxn], r[maxn], c[maxn], father[maxn], n;
LL dis[maxn];
int Find (int x)
{
if (x != father[x])
father[x] = Find (father[x]);
return father[x];
}
void Merge (int x, int y)
{
int px = Find(x);
int py = Find(y);
if (px == py)
return ;
father[px] = py;
}
void dijkstra (int x)
{
priority_queue <node> Q;
dis[x] = c[x];
Q.push(node(x, dis[x]));
while (!Q.empty())
{
int p = Q.top().x;
Q.pop();
for (int i=-; i<=; i+=)
{
int L = p + l[p]*i;
int R = p + r[p]*i;
if (L > R)
swap(L, R);
L = max (L, );
R = min (R, n);
for (int j=L; j<=R; j++)
{
j = Find (j);
if ( j > R)
break;
if (dis[j] > dis[p] + c[j])
{
dis[j] = dis[p] + c[j];
Q.push(node(j, dis[j]));
}
Merge (j, j+);
}
}
}
}
int main ()
{
int t;
scanf ("%d", &t);
while (t --)
{
scanf ("%d", &n);
for (int i=; i<=n; i++)
scanf ("%d", &l[i]);
for (int i=; i<=n; i++)
scanf ("%d", &r[i]);
for (int i=; i<=n; i++)
scanf ("%d", &c[i]);
for (int i=; i<=n+; i++)
{
father[i] = i;
dis[i] = INF;
}
dijkstra ();
for (int i=; i<=n; i++)
{
if (dis[i] == INF)
dis[i] = c[i] - ;
printf ("%lld%c", dis[i]-c[i], i==n?'\n':' ');
}
}
return ;
}
Hdu 5361 In Touch (dijkatrs+优先队列)的更多相关文章
- HDU 5361 In Touch (2015 多校6 1009 最短路 + 区间更新)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=5361 题意:最短路.求源点到全部点的最短距离.但与普通最短路不同的是,给出的边是某点到区间[l,r]内随意 ...
- 2015 Multi-University Training Contest 6 hdu 5361 In Touch
In Touch Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total ...
- HDU 1428 漫步校园 (BFS+优先队列+记忆化搜索)
题目地址:HDU 1428 先用BFS+优先队列求出全部点到机房的最短距离.然后用记忆化搜索去搜. 代码例如以下: #include <iostream> #include <str ...
- hdu 5437 Alisha’s Party 优先队列
Alisha’s Party Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/contests/contest_sh ...
- HDU 5884 Sort(二分+优先队列)
http://acm.hdu.edu.cn/showproblem.php?pid=5884 题意:有个屌丝设计了一个程序,每次可以将k个数组进行合并,代价为这k个数组总的长度之和.现在另外一个屌丝要 ...
- 拓扑排序 - hdu 1285(普通和优先队列优化)
2017-09-12 19:50:58 writer:pprp 最近刚开始接触拓扑排序,拓扑排序适用于:无圈图的顶点的一种排序, 用来解决有优先级别的排序问题,比如课程先修后修,排名等. 主要实现:用 ...
- 2015多校第6场 HDU 5361 并查集,最短路
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5361 题意:有n个点1-n, 每个点到相邻点的距离是1,然后每个点可以通过花费c[i]的钱从i点走到距 ...
- 2015多校第6场 HDU 5360 Hiking 贪心,优先队列
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5360 题意:给定n个人,现在要邀请这些人去远足,但每个人同意邀请的条件是当前已经同意去远足的人数c必须 ...
- HDU 5638 Toposort 拓扑排序 优先队列
Toposort 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5638 Description There is a directed acycli ...
随机推荐
- (转)Delphi2009初体验 - 语言篇 - 智能指针(Smart Pointer)的实现
转载:http://www.cnblogs.com/felixYeou/archive/2008/08/27/1277250.html 快速导航 一. 回顾历史二. 智能指针简介三. Delphi中 ...
- uva live 12846 A Daisy Puzzle Game
假设下一个状态有必败.那么此时状态一定是必胜,否则此时状态一定是必败 状压DP #include<iostream> #include<map> #include<str ...
- 从头认识Spring-3.1 简单的AOP日志实现-某方法之前的前后记录日志
这一章节我们引入简单的AOP日志实现. 1.domain 蛋糕类: package com.raylee.my_new_spring.my_new_spring.ch03.topic_1_1; pub ...
- Effective C++ Item 27 少做转型操作
本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie todo Item34 旧式转型 (T) expression 或 T (expressio ...
- SQL 快速参考
SQL 快速参考 SQL 语句 语法 AND / OR SELECT column_name(s)FROM table_nameWHERE conditionAND|OR condition ALTE ...
- 【Mongodb教程 第五课 】MongoDB 删除集合
drop() 方法 MongoDB 的 db.collection.drop() 是用来从数据库中删除一个集合. 语法: drop() 命令的基本语法如下 db.COLLECTION_NAME.dro ...
- com.squareup.timessquare.CalendarPickerView
com.squareup.timessquare.CalendarPickerView https://github.com/square/android-times-square
- DDM的成熟在一个细微之处的体现
前言 我们都知道DDM是华为云的非常优秀的分布式数据库中间件,在性能.易用性等方面在业界是遥遥领先的.他的成熟不仅仅体现在具有快速水平平滑扩容,支持多种分布式事物类型等等这些高大上的特性上,也体现在D ...
- Ubuntu 14.04正式公布,一个不眠之夜
请看下图: 这就是Ubuntu 14.04 LTS桌面版本号的一份视图.感觉既亲切,又寻常,可是,没有什么大的变化.注意:这个Ubuntu桌面版本号要陪伴我们长达5年之久! 直到4月18日(北京时间) ...
- 李洪强iOS开发之性能优化技巧
李洪强iOS开发之性能优化技巧 通过静态 Analyze 工具,以及运行时 Profile 工具分析性能瓶颈,并进行性能优化.结合本人在开发中遇到的问题,可以从以下几个方面进行性能优化. 一.view ...