Invade the Mars
题目
网上大把
分析
显然不能简单直接最短路
城市被攻占的特点是:保护的城市都被攻占了
那么这个城市被攻占的最早时间必然是所有保护他的城市中最大的被攻占时间
于是我们可以
设 \(dis\) 表示军队走到城市 \(i\) 驻扎于城外的最短时间
\(f\) 表示所有保护他的城市中最大的被攻占时间
最短路中,对于当前点 \(u\)
先让他保护的点 \(v\) 度数--,并取 \(f_v = \max{dis_u}\)
若度数降至 \(0\),可松弛并将其入队
然后再考虑有向边的松弛
具体可见代码
\(Code\)
#include<cstdio>
#include<cstring>
#include<vector>
#include<queue>
using namespace std;
const int N = 3005 , M = 70005 , INF = 2e9;
int T , n , m , tot , h[N] , dis[N] , vis[N] , deg[N] , f[N];
vector<int> pt[N];
struct edge{int nxt , to , w;}e[2 * M];
struct node{
int id , d;
bool operator < (node c) const {return d > c.d;}
};
priority_queue<node> Q;
inline void add(int x , int y , int z)
{
e[++tot] = edge{h[x] , y , z} , h[x] = tot;
}
void dijkstra()
{
memset(vis , 0 , sizeof vis);
while (!Q.empty()) Q.pop();
for(register int i = 1; i <= n; i++) dis[i] = INF , f[i] = 0;
Q.push(node{1 , dis[1] = 0});
node now;
while (!Q.empty())
{
now = Q.top() , Q.pop();
int id = now.id , v;
if (vis[id]) continue;
vis[id] = 1;
for(register int i = 0; i < pt[id].size(); i++)
{
v = pt[id][i];
f[v] = max(f[v] , dis[id]);
--deg[v];
if (deg[v] == 0 && dis[v] != INF)
dis[v] = max(dis[v] , f[v]) , Q.push(node{v , dis[v]});
}
for(register int i = h[id]; i; i = e[i].nxt)
{
v = e[i].to;
if (dis[id] + e[i].w < dis[v])
{
dis[v] = max(dis[id] + e[i].w , f[v]);
if (deg[v] == 0) Q.push(node{v , dis[v]});
}
}
}
printf("%d\n" , dis[n]);
}
int main()
{
scanf("%d" , &T);
while (T--)
{
scanf("%d%d" , &n , &m);
for(register int i = 1; i <= n; i++) pt[i].clear() , deg[i] = 0;
tot = 0;
memset(h , 0 , sizeof h);
int x , y , z;
for(register int i = 1; i <= m; i++)
scanf("%d%d%d" , &x , &y , &z) , add(x , y , z);
for(register int i = 1; i <= n; i++)
{
scanf("%d" , &x) , deg[i] = x;
for(register int j = 1; j <= x; j++)
scanf("%d" , &y) , pt[y].push_back(i);
}
dijkstra();
}
}
Invade the Mars的更多相关文章
- hdu 3873 Invade the Mars(有限制的最短路 spfa+容器)
Invade the Mars Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 365768/165536 K (Java/Others ...
- hdu3873 Invade the Mars 有限制的最短路
此段略过.看完题目,觉得这真的是一道好题目.自己有想法,但是实现起来却很难.看题解,写代码,然后写题解,意义何在?我不认为自己总是这么弱.就算抄代码,我也要有自己的理解.菜鸟总会成长. 首先,题目必须 ...
- HDU 3873 Invade the Mars(带限制条件的Dijkstra)
题目网址:http://acm.hdu.edu.cn/showproblem.php?pid=3873 思路: 军队可以先等待在城市外面,等保护该城市的城市都被攻破后,直接进城(即进城不用耗费时间). ...
- 【转】最短路&差分约束题集
转自:http://blog.csdn.net/shahdza/article/details/7779273 最短路 [HDU] 1548 A strange lift基础最短路(或bfs)★254 ...
- 【转载】图论 500题——主要为hdu/poj/zoj
转自——http://blog.csdn.net/qwe20060514/article/details/8112550 =============================以下是最小生成树+并 ...
- 【HDOJ图论题集】【转】
=============================以下是最小生成树+并查集====================================== [HDU] How Many Table ...
- 2011 Multi-University Training Contest 4 - Host by SDU
A.Color the Simple Cycle(polya计数+字符串匹配) 此题的难点在于确定置换的个数,由a[i+k]=a[i], e[i+k]=e[i]联想到KMP. 于是把原串和原串扩大两倍 ...
- hdu图论题目分类
=============================以下是最小生成树+并查集====================================== [HDU] 1213 How Many ...
- 转载 - 最短路&差分约束题集
出处:http://blog.csdn.net/shahdza/article/details/7779273 最短路 [HDU] 1548 A strange lift基础最短路(或bfs)★ ...
- 最短路&查分约束
[HDU] 1548 A strange lift 根蒂根基最短路(或bfs)★ 2544 最短路 根蒂根基最短路★ 3790 最短路径题目 根蒂根基最短路★ 2066 一小我的观光 根蒂根基最短路( ...
随机推荐
- 【JVM调优】Day04:总结前三日内容(GC+算法*4+简单回收器*3三色标记,CMS+G1+ZGC,参数个数+OOM+调优参数)
- 【RocketMQ】主从同步实现原理
主从同步的实现逻辑主要在HAService中,在DefaultMessageStore的构造函数中,对HAService进行了实例化,并在start方法中,启动了HAService: public c ...
- 提高python异步效率
uvloop #Python标准库中提供了asyncio模块,用于支持基于协程的异步编程. #uvloop是 asyncio 中的事件循环的替代方案,替换后可以使得asyncio性能提高.事实上,uv ...
- 彻底理解Python中的闭包和装饰器(下)
上篇讲了Python中的闭包,本篇要讲的装饰器就是闭包的一个重要应用. 如果你还不知道什么是闭包,猛戳这里阅读:彻底理解Python中的闭包和装饰器(上) 什么是装饰器 装饰器的作用是在不修改函数定义 ...
- SQL语句查询关键字:where筛选、group by分组、distinc去重、order by排序、limit分页、操作表的SQL语句布补充
目录 SQL语句查询关键字 前期数据准备 编写SQL语句的小技巧 查询关键字之where筛选 查询关键字之group by分组 查询关键字之having过滤 查询关键字值distinct去重 查询关键 ...
- Python实验报告(第9章)
实验9:异常处理及程序调试 一.实验目的和要求 1.了解代码异常知识: 2.掌握异常处理的try-except语句.try-except-else语句.try-except-finally语句.rai ...
- 【分布式技术专题】「LVS负载均衡」全面透析Web基础架构负载均衡LVS机制的原理分析指南
前提概要 在大规模互联网应用中,负载均衡设备是必不可少的组成部分,源于互联网应用的高并 发和大流量的冲击压力场景下,通常会在服务端部署多个无状态的应用服务器和若干有状态的存储服务器(数据库.缓存等等) ...
- ArcGIS工具 - 计算折点数量
在GIS中,点构成线,线构成面,面构成体,维度增加,模型也加复杂.有时,我们需要统计线面等要素到底由多少个点构成,系统工具没有此功能,为源地理提供了三种解决方案. 方法一 折点转点 使用要素折点转点工 ...
- 洛谷 P2440木材加工 题解
这是一道二分答案算法题,洛谷标签中的贪心等完全用不到. 这道题的数据范围较大,所以保险起见,整型的数据我们都开成longlong 题意很好理解,这里就不做过多的分析了,直接看代码,后面有注释: #in ...
- python 第一二次教学笔记之数据操作
对Python 有一个认知 记住这是一个动态类型的,弱类型语言 ds =111.0 #弱类型 前面不用写明是具体什么类型 haobo=10 haobo = ds #类型转换不再有高低之分 hoabo ...