题目链接:https://nanti.jisuanke.com/t/41349

题意:有一个灭火英雄,和一个灭火团队,一个人与一个团队比较。

灭火英雄到其他灭火点的最短路最大值,与一个团队到其他灭火点的最短路的最大距离*C,进行比较。

如果一个团队的一个人在k点,那么k点的最短路就是0,这样,我们可以构建一个虚拟点“0”点,跑团队的最短路

可以让“0”点到其他团队队员点为0,到其他点为inf,然后跑一次最短路就可以了,下面的代码是比赛时候的,懒得改,直接很难看的写了。


 #include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>
#include <string>
using namespace std; typedef long long LL;
#define inf 1e9
#define rep(i,j,k) for(int i = (j); i <= (k); i++)
#define rep__(i,j,k) for(int i = (j); i < (k); i++)
#define per(i,j,k) for(int i = (j); i >= (k); i--)
#define per__(i,j,k) for(int i = (j); i > (k); i--) const int N = ;
bool vis[N];
int mp[N][N];
bool fired[N];
int team[N];
int dis[N];
int V,E,S,K,C; int dijkstra(int s){ rep(i,,V) vis[i] = false; if(s){
rep(i,,V) dis[i] = inf;
rep(i,,V) dis[i] = mp[s][i];
vis[s] = true; rep(i,,V){//团队的 int x = -;
int c = inf; rep(j,,V){ if(!vis[j] && c > dis[j]) x = j, c = dis[j];
}
if(x == -) continue; vis[x] = true;
rep(p,,V){
if(!vis[p] && dis[x] + mp[x][p] < dis[p]){
dis[p] = dis[x] + mp[x][p];
}
} }
}
else{//英雄的
rep(i,,V) dis[i] = inf;
rep(i,,K) dis[team[i]] = ;
vis[s] = true; rep(i,,V){ int x = -;
int c = inf; rep(j,,V){ if(!vis[j] && c > dis[j]) x = j, c = dis[j];
}
if(x == -) continue; vis[x] = true;
rep(p,,V){
if(!vis[p] && dis[x] + mp[x][p] < dis[p]){
dis[p] = dis[x] + mp[x][p];
}
} }
} int ans = ;
rep(i,,V){ if(dis[i] == inf) continue;
if(fired[i]) ans = max(ans,dis[i]);
} return ans;
} int main(){ ios::sync_with_stdio(false);
cin.tie(); int T;
cin >> T; int p = ;
int q = ;
while(T--){
cin >> V >> E >> S >> K >> C; rep(i,,V) rep(j,,V){
if(i == j) mp[i][j] = ;
else mp[i][j] = inf;
} rep(i,,K){
cin >> team[i];
} int u,v,w; rep(i,,E){
cin >> u >> v >> w;
fired[v] = true;
if(mp[u][v] > w){
mp[u][v] = mp[v][u] = w;
}
} p = dijkstra(S);//英雄 q = dijkstra();//团队 if(p <= q*C) cout << p << endl;
else cout << q << endl;
} getchar();getchar(); return ;
}

The 2019 Asia Nanchang First Round Online Programming Contest B. Fire-Fighting Hero的更多相关文章

  1. The 2019 Asia Nanchang First Round Online Programming Contest

    传送门 A. Enju With math problem 题意: 给出\(a_1,\cdots,a_{100}\),满足\(a_i\leq 1.5*10^8\). 现在问是否存在一个\(pos\), ...

  2. The 2019 Asia Nanchang First Round Online Programming Contest C(cf原题,线段树维护矩阵)

    题:https://nanti.jisuanke.com/t/41350 分析:先将字符串转置过来 状态转移,因为只有5个状态,所以 i 状态到 j 状态的最小代价就枚举[i][k]->[k][ ...

  3. The 2019 Asia Nanchang First Round Online Programming Contest E. Magic Master

    题目链接:https://nanti.jisuanke.com/t/41352 题目意思还是好理解的,看过的人不多,感觉是被通过量吓到了.其实就是个水题,反向模拟就好了, 用队列模拟,反向模拟,它要放 ...

  4. The 2019 Asia Nanchang First Round Online Programming Contest The Nth Item

    The Nth Item 思路: 先用特征根法求出通向公式,然后通向公式中出现了\(\sqrt{17}\),这个可以用二次剩余求出来,然后可以O(\(log(n)\))求出. 但是还不够,我们先对\( ...

  5. H. The Nth Item(The 2019 Asia Nanchang First Round Online Programming Contest)

    题意:https://nanti.jisuanke.com/t/41355 给出N1,计算公式:A=F(N)Ni=Ni-1 ^ (A*A),F为类斐波那契需要矩阵快速幂的递推式. 求第k个N. 思路: ...

  6. E.Magic Master(The 2019 Asia Nanchang First Round Online Programming Contest)

    直接模拟orhttps://blog.csdn.net/liufengwei1/article/details/100643831

  7. The 2019 Asia Nanchang First Round Online Programming Contest(B,E)

    B. Fire-Fighting Hero 题意:一个消防员和多个队伍比赛,比较所有地方的最短路的最大值,消防员最后的值要乘1/C,求胜利的一方的最短路的最大值是多少.一直没读懂正确题意(内疚). 思 ...

  8. The 2019 Asia Nanchang First Round Online Programming Contest B Fire-Fighting Hero(阅读理解)

    This is an era of team success, but also an era of heroes. Throughout the ages, there have been nume ...

  9. The 2019 Asia Nanchang First Round Online Programming Contest C. Hello 2019(动态dp)

    题意:要找到一个字符串里面存在子序列9102 而不存在8102 输出最小修改次数 思路:对于单次询问 我们可以直接区间dpOn求出最小修改次数 但是对于多次询问 我在大部分题解看到的解释一般是用线段树 ...

随机推荐

  1. bash shell——sum

    #!/bin/bash # sum.sh # 获取随机数量的参数,相加并打印结果 # total= # # $# 表示参数的数量 # for 循环获取每个参数 # ${!i} 表示返回第i个参数 # ...

  2. CF1194F Crossword Expert(数论,组合数学)

    不难的一题.不知道为什么能 $2500$…… 不过场上推错了一直不会优化…… 首先考虑 $f_i$ 表示恰好做完前 $i$ 道题的概率. 这样很难算.修改一下,$f_i$ 表示做完至少 $i$ 道题的 ...

  3. Linux性能优化实战学习笔记:第二十五讲

    一.磁盘性能指标 1.使用率 2.饱和度 3.IOPS 4.吞吐量 5.响应时间 6.性能测试工具 二.磁盘I/O观测 1.每块磁盘的使用率(指标实际上来自/proc/diskstats) [root ...

  4. [LeetCode] 670. Maximum Swap 最大置换

    Given a non-negative integer, you could swap two digits at most once to get the maximum valued numbe ...

  5. 解决IDEA卡顿的问题(Windows和Mac)

    IDEA卡顿 最近一段时间经常会在开发的时候感觉到 IDEA 很卡,在一个类里上下滚动或者切换类文件时都能够明显的感觉到,我以为是我项目打开的太多了,毕竟内存优化已经做过了,但是今天实在是被这玩意儿卡 ...

  6. (算法)LeetCode刷题

    LeetCode 56 合并区别 Given [1,3],[2,6],[8,10],[15,18], return [1,6],[8,10],[15,18]. 关键就是a[1]>=b[0] 也就 ...

  7. c++小学期大作业攻略(零)建议+代码结构(持续更新)

    当前已经做好的exe,数据库是连服务器的,但是头像是存在本地的文件系统里面: https://cloud.tsinghua.edu.cn/d/059ef6b1f9a149ce879b/files/?p ...

  8. Android studio(AS) svg图片使用

    1.下载svg文件,https://www.iconfont.cn/阿里的2.通过AS - New - Vectro Asset转换成安卓可用的xml文件(ic_back.xml)3.配置Gradle ...

  9. MongoDB学习笔记(五)

    MongoDB 查看执行计划 MongoDB 中的 explain() 函数可以帮助我们查看查询相关的信息,这有助于我们快速查找到搜索瓶颈进而解决它,本文我们就来看看 explain() 的一些用法及 ...

  10. bean的shutdown

    使用@Bean注解,在不配置destroyMethod时,其默认值为: String destroyMethod() default AbstractBeanDefinition.INFER_METH ...