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 一小我的观光 根蒂根基最短路( ...
随机推荐
- 关于最新版本listen1 (2.1.6)的修改心得(添加下载功能)
注:本文只作为技术交流 前言 再次感谢 listen1 的作者开发出如此强大的音乐播放器 项目地址 上一篇的文章没有解决跨域问题(命名不能正确命名), 上一篇文章 地址 这次解决了,并简单的美化了下载 ...
- SSH ERROR com.opensymphony.xwork2.interceptor.ParametersInterceptor
修改struts.xml配置:struts.devMode value="false" <constant name="struts.devMode" v ...
- 【Java并发入门】03 互斥锁(上):解决原子性问题
原子性问题的源头是线程切换 Q:如果禁用 CPU 线程切换是不是就解决这个问题了? A:单核 CPU 可行,但到了多核 CPU 的时候,有可能是不同的核在处理同一个变量,即便不切换线程,也有问题. 所 ...
- MySQL数据库和Python的交互
一.缘由 这是之前学习的时候写下的基础代码,包含着MySQL数据库和Python交互的基本操作. 二.代码展示 import pymysql ''' 1.数据库的链接和创建视图 ''' # db=py ...
- 7-3 停车场管理 (20point(s))
设有一个可以停放n辆汽车的狭长停车场,它只有一个大门可以供车辆进出.车辆按到达停车场时间的先后次序依次从停车场最里面向大门口处停放 (即最先到达的第一辆车停放在停车场的最里面) .如果停车场已放满n辆 ...
- 2021-01-26HDOJ_Lowest_Bit
挺水的,但也学到了简单方法 题目如下: Lowest Bit Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (J ...
- [深度学习] imgaug库使用笔记
imgaug是一款非常有用的python图像增强库,非常值得推荐应用于深度学习图像增强.其包含许多增强技术,支持图像分类,目标检测,语义分割,热图.关键点检测等一系列任务的图像增强.本文主要介绍img ...
- [编程基础] Python谷歌翻译库googletrans总结
1 使用说明 本文介绍python谷歌翻译库接口googletrans的使用.具体见官方文档: https://py-googletrans.readthedocs.io/en/latest/#goo ...
- ArcGIS工具 - 导出数据库结构
为了保证数据的一致性,数据库结构的正确性在数据库建设和管理过程中显示十分重要,在各个地理信息类项目的技术规定中都对空间数据库的结构进行明确和详细的定义,有时为了方便检查或文档编辑需要将数据结构导出,为 ...
- xpath解析数据的方法
1 功能描述 2 1.实例化一个etree对象,且需要将被解析的页面源码数据加载到该对象中 3 2.调用etree对象中的XPath表达式实现标签的定位和内容捕获 4 3.环境安装 pip insta ...