题目

网上大把

分析

显然不能简单直接最短路

城市被攻占的特点是:保护的城市都被攻占了

那么这个城市被攻占的最早时间必然是所有保护他的城市中最大的被攻占时间

于是我们可以

设 \(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的更多相关文章

  1. hdu 3873 Invade the Mars(有限制的最短路 spfa+容器)

    Invade the Mars Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 365768/165536 K (Java/Others ...

  2. hdu3873 Invade the Mars 有限制的最短路

    此段略过.看完题目,觉得这真的是一道好题目.自己有想法,但是实现起来却很难.看题解,写代码,然后写题解,意义何在?我不认为自己总是这么弱.就算抄代码,我也要有自己的理解.菜鸟总会成长. 首先,题目必须 ...

  3. HDU 3873 Invade the Mars(带限制条件的Dijkstra)

    题目网址:http://acm.hdu.edu.cn/showproblem.php?pid=3873 思路: 军队可以先等待在城市外面,等保护该城市的城市都被攻破后,直接进城(即进城不用耗费时间). ...

  4. 【转】最短路&差分约束题集

    转自:http://blog.csdn.net/shahdza/article/details/7779273 最短路 [HDU] 1548 A strange lift基础最短路(或bfs)★254 ...

  5. 【转载】图论 500题——主要为hdu/poj/zoj

    转自——http://blog.csdn.net/qwe20060514/article/details/8112550 =============================以下是最小生成树+并 ...

  6. 【HDOJ图论题集】【转】

    =============================以下是最小生成树+并查集====================================== [HDU] How Many Table ...

  7. 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. 于是把原串和原串扩大两倍 ...

  8. hdu图论题目分类

    =============================以下是最小生成树+并查集====================================== [HDU] 1213 How Many ...

  9. 转载 - 最短路&差分约束题集

    出处:http://blog.csdn.net/shahdza/article/details/7779273 最短路 [HDU] 1548    A strange lift基础最短路(或bfs)★ ...

  10. 最短路&查分约束

    [HDU] 1548 A strange lift 根蒂根基最短路(或bfs)★ 2544 最短路 根蒂根基最短路★ 3790 最短路径题目 根蒂根基最短路★ 2066 一小我的观光 根蒂根基最短路( ...

随机推荐

  1. 2022年鲜为人知的CSS 特性了解起来~

    前言 随着CSS的不断发展,一些很酷且有用的属性要么完全被忽视,要么由于某种原因不像其他常见属性那样被开发者熟练应用.这篇文章我们将一起学习那些CSS中陌生但非常有用的CSS属性,这些属性你可能听说过 ...

  2. (四) 一文搞懂 JMM - 内存模型

    4.JMM - 内存模型 1.JMM内存模型 JMM与happen-before 1.可见性问题产生原因 下图为x86架构下CPU缓存的布局,即在一个CPU 4核下,L1.L2.L3三级缓存与主内存的 ...

  3. 填坑日志-云网络智慧课堂双网卡Mac地址读取错误的问题及解决

    云网络智慧课堂的双网卡问题记录及解决方案 教师端 其实这里双网卡的问题一直没有解决,分为了两部分,一部分是教师端,一部分是学生端.症状类似,问题也类似,都是在设计之初因为硬件限制可能没有考虑到双网卡的 ...

  4. 云知声: 基于 JuiceFS 的超算平台存储实践

    云知声从一家专注于语音及语言处理的技术公司,现在技术栈已经发展到具备图像.自然语言处理.信号等全栈式的 AI 能力,是国内头部人工智能独角兽企业.公司拥抱云计算,在智慧医疗.智慧酒店.智慧教育等方面都 ...

  5. 过滤器 Filter 与 拦截器 Interceptor 的区别

    引言 说起 Filter 与 Interceptor 的区别,相信很多同学第一感觉就是容易.简单! 毕竟开发中这两个组件使用频率较高,用法也较简单.然后真回答起来有答不出个所以然来,场面尴尬,老丢脸了 ...

  6. php的可变变量覆盖漏洞

    题目如下: <?php highlight_file('source.txt'); echo "<br><br>"; $flag = 'xxxxxxx ...

  7. Linux命令篇 - nc(ncat) 命令

    nc (ncat) Ncat is a feature-packed networking utility which reads and writes data across networks fr ...

  8. 一文告诉你AVM中设置字体的方法

    ​ avm 是一种简便的多端开发框架,可以开发APP.小程序.H5.今天学习了一下使用 avm 开发 APP 怎么设置字体,下面将经验分享给大家. 所需步骤: 1.  将需要使用的字体文件放到代码包r ...

  9. TiDB上百T数据拆分实践

    背景 提高TiDB可用性,需要把多点已有上百T TiDB集群拆分出2套 挑战 1.现有需要拆分的12套TiDB集群的版本多(4.0.9.5.1.1.5.1.2都有),每个版本拆分方法存在不一样 2.其 ...

  10. Git和Maven的学习笔记

    Git 1.Git简介 Git 是一个免费的.开源的分布式版本控制系统,可以快速高效地处理从小型到大型的各种 项目. Git 易于学习,占地面积小,性能极快. 它具有廉价的本地库,方便的暂存区域和多个 ...