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 一小我的观光 根蒂根基最短路( ...
随机推荐
- 卸载virtualbox中linux虚拟机的增强工具
报错信息 vboxclient:the virtualbox kernel service is not running 前言 我由virtualbox换到vmware 遇到了这个问题,很烦每次都通知 ...
- 【Java SE进阶】Day10 缓冲流、转换流、序列化流 、打印流
一.缓冲流 1.概述 比普通流更强大的IO流,可以增加读写的效率 组成 缓冲输入流:BufferedInputStream.BufferedReader 缓冲输出流:BufferedOutputStr ...
- 【Spark】Day06-Spark高级课程:性能调优、算子调优、Shuffle调优、JVM调优、数据倾斜、TroubleShooting
一.Spark性能调优 1.常规性能调优 (1)最优资源配置:Executor数量.Executor内存大小.CPU核心数量&Driver内存 (2)RDD优化:RDD复用.RDD持久化(序列 ...
- python 中文分词工具
python 中文分词工具 jieba,https://github.com/fxsjy/jieba jieba_fast,https://github.com/deepcs233/jieba_fas ...
- Blazor组件自做十二 : Blazor Pdf Reader PDF阅读器 组件 (新版 7.1 移除pdfobject)
Blazor Pdf Reader PDF阅读器 组件 示例: https://www.blazor.zone/PdfReaders https://blazor.app1.es/pdfReaders ...
- uniapp(vue)实现点击左侧菜单,右侧显示对应的内容
<template> <view class="container"> <view class="fication-search" ...
- CH9120/CH9121 WCH-ETH透传芯片(持续更新)
网络变压器中心抽头: 如果使用网络变压器,变压器的中心抽头需要看PHY芯片时电流型还是电压型. 如果是电压型,则需要通过一个电容直接接到GND. 如果时电流型的PHY,那么就需要根据PHY芯片来看,从 ...
- 聊一聊 SQLSERVER 的行不能跨页
一:背景 1. 讲故事 相信有很多朋友在学习 SQLSERVER 的时候都听说过这句话,但大多都是记忆为主,最近在研究 SQLSERVER,所以我们从 底层存储 的角度来深入理解下. 二:理解数据页 ...
- [seaborn] seaborn学习笔记1-箱形图Boxplot
文章目录 1 箱形图Boxplot 1. 基础箱形图绘制 Basic boxplot and input format 2. 自定义外观 Custom boxplot appearance 3. 箱型 ...
- JAVA中使用最广泛的本地缓存?Ehcache的自信从何而来 —— 感受来自Ehcache的强大实力
大家好,又见面了. 本文是笔者作为掘金技术社区签约作者的身份输出的缓存专栏系列内容,将会通过系列专题,讲清楚缓存的方方面面.如果感兴趣,欢迎关注以获取后续更新. 作为<深入理解缓存原理与实战设计 ...