题目网址:http://acm.hdu.edu.cn/showproblem.php?pid=3873

思路:

军队可以先等待在城市外面,等保护该城市的城市都被攻破后,直接进城(即进城不用耗费时间)。则进入该城市的最少时间为max(达到该城市的最少时间,到达保护该城市的所有城市的最大时间)。

用num[i]标记第i个城市被保护的数目,只有当该点被保护的数目为0时,才能入S集合,从而优化到其他点的时间。当前进入S集合的城市,遍历它所保护的城市,num[i]减一,记录下被保护的城市解除保护所需的最长时间。

说的有点绕,看代码会比较清楚。

需要注意的一点!!有重边,所以读边的时候要注意,如果是用邻接表就无所谓啦,但如果是用邻接矩阵 要读入最小值。

代码:

 #include <cstdio>
#include <vector>
#include <cstring>
#include <algorithm>
using namespace std;
const int inf=1e8+;
int n,m;
int num[];
int dist[];
int S[];
int edge[][];
int rp[];//rp[i]表示攻破保护i城市的所有城市所需要的最长时间
vector<int>city[];
void init(){
memset(num, , sizeof(num));
memset(rp, , sizeof(rp));
memset(S, , sizeof(S));
for (int i=; i<=n; i++) {
city[i].clear();
dist[i]=inf;
}
for (int i=; i<=n; i++) {
for (int j=; j<=n; j++) {
edge[i][j]=inf;
}
}
}
void dijkstra(){
dist[]=;
for(int i=;i<n;i++){
int Min=inf,u=-;
for (int j=; j<=n; j++) {
dist[j]=max(dist[j], rp[j]);//每次遍历前 都要更新时间
if(dist[j]<Min && !num[j] && !S[j]){
Min=dist[j];
u=j;
}
}
if(u==-) return ;
S[u]=;
for (int j=; j<city[u].size(); j++) {//更新保护的城市信息
int t=city[u][j];
num[t]--;
rp[t]=max(rp[t],dist[u]);
}
city[u].clear();
for (int j=; j<=n; j++) {
if(dist[j]>dist[u]+edge[u][j] && !S[j]){
dist[j]=dist[u]+edge[u][j];
}
}
}
}
int main(){
int t;
scanf("%d",&t);
while (t--) {
scanf("%d%d",&n,&m);
init();
for(int i=;i<m;i++){
int v,u,w;
scanf("%d%d%d",&v,&u,&w);
edge[v][u]=min(edge[v][u],w);//保留最小值 }
for(int i=;i<=n;i++){
int a,b;
scanf("%d",&a);
num[i]=a;//记录保护i城市的所有城市数量
for (int j=; j<a; j++) {
scanf("%d",&b);
city[b].push_back(i);//city[b]为b城市 要保护的城市
}
}
dijkstra();
printf("%d\n",dist[n]);
}
return ;
}

HDU 3873 Invade the Mars(带限制条件的Dijkstra)的更多相关文章

  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. POJ 1062 昂贵的聘礼(带限制条件的dijkstra)

    题目网址:http://poj.org/problem?id=1062 题目: 昂贵的聘礼 Time Limit: 1000MS   Memory Limit: 10000K Total Submis ...

  3. HDU 5188 zhx and contest(带限制条件的 01背包)

    Problem Description As one of the most powerful brushes in the world, zhx usually takes part in all ...

  4. HDU 3047 Zjnu Stadium(带权并查集)

    http://acm.hdu.edu.cn/showproblem.php?pid=3047 题意: 给出n个座位,有m次询问,每次a,b,d表示b要在a右边d个位置处,问有几个询问是错误的. 思路: ...

  5. HDU(1856),裸的带权并查集

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1856 题意:朋友圈问题,A和B是朋友,B和C是朋友则A和C也是朋友,依次类推,题目的意思就是求最大的朋 ...

  6. hdu 3074 Zjnu Stadium (带权并查集)

    Zjnu Stadium Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tota ...

  7. hdu 3790 最短路径问题(两个限制条件的最短路)

    http://acm.hdu.edu.cn/showproblem.php?pid=3790 有两个条件:距离和花费.首先要求距离最短,距离相等的条件下花费最小. dijkstra,仅仅是在推断条件时 ...

  8. HDU 4359 Easy Tree DP? 带权二叉树的构造方法 dp

    题意: 给定n deep 1.构造一个n个节点的带权树,且最大深度为deep,每一个节点最多仅仅能有2个儿子 2.每一个节点的值为2^0, 2^1 ··· 2^(n-1)  随意两个节点值不能同样 3 ...

  9. HDU 3635 Dragon Balls(带权并查集)

    http://acm.hdu.edu.cn/showproblem.php?pid=3635 题意: 有n颗龙珠和n座城市,一开始第i颗龙珠就位于第i座城市,现在有2种操作,第一种操作是将x龙珠所在城 ...

随机推荐

  1. charles 重写工具/rewrite Srttings

    本文参考:charles 重写工具 rewrite Srttings 重写工具/rewrite Srttings and rewrite rule 功能:在通过charles时修改请求和响应 重写工具 ...

  2. Vue路由(vue-router)详细讲解指南

    中文文档:https://router.vuejs.org/zh/ Vue Router 是 Vue.js 官方的路由管理器.它和 Vue.js 的核心深度集成,让构建单页面应用变得易如反掌.路由实际 ...

  3. App引流增长技术:Deeplink(深度链接)技术

    移动互联网时代,信息的分享传播无疑是 App 引流增长的关键,与其花费大量精力和成本找渠道.硬推广,不如从细节下手,用最快最简便的方法实现 Deeplink(深度链接)技术,打破信息孤岛.缩短分享路径 ...

  4. [Advanced Python] 15 - "Metaclass": ORM

    From: 使用元类 动态创建类 与静态语言最大的不同,就是函数和类的定义,不是编译时定义的,而是运行时动态创建的. 一 .type()动态创建 我们说class的定义是运行时动态创建的: 而创建cl ...

  5. mysql隔离级别的测试

    mysql提供四种隔离级别,以下分别对四种隔离级别进行测试,更加直观清晰的了解.具体的隔离级别以及其他相关介绍见https://www.cnblogs.com/eric-fang/p/11052304 ...

  6. Redis 5.0 redis-cli --cluster help说明

    背景: Redis Cluster 在5.0之后取消了ruby脚本 redis-trib.rb的支持(手动命令行添加集群的方式不变),集合到redis-cli里,避免了再安装ruby的相关环境.直接使 ...

  7. 23种设计模式之工厂方法(Factory Method Pattern)

    工厂方法 前面我们学习了简单工厂,发现一个问题就是简单工厂集合了矛盾,为了解决这个问题我们针对每一种产品提供一个工厂类.通过不同的工厂实例来创建不同的产品实例.在同一等级结构中,支持增加任意产品这种设 ...

  8. Spring Boot认证:整合Jwt

    背景 Jwt全称是:json web token.它将用户信息加密到token里,服务器不保存任何用户信息.服务器通过使用保存的密钥验证token的正确性,只要正确即通过验证. 优点 简洁: 可以通过 ...

  9. eShopOnContainers学习系列(二):数据库连接健康检查

    项目里使用数据库的时候,我们有时候需要知道数据库当前的健康状态,特别是当数据库连接不上的时候能够立马获悉.eShopOnContainers里存在着大量的服务健康.连接健康的检查,数据库连接是其中之一 ...

  10. TensorFlow2.0(四):填充与复制

    .caret, .dropup > .btn > .caret { border-top-color: #000 !important; } .label { border: 1px so ...