题意:存在有n个地方, 有两个人分别从1和n号地点出发,问在最短的时间里他们在哪个地点能能够相遇,如果有多个地点则输出多个节点。然后给了m个集合,每个集合中的所有地点之间距离为t。
题解:该题很容易想到最短路然后枚举所有可能相遇的点取max后取min,难点在于建图,如果暴力建图的话会出现n^2复杂度,所以我们把每个集合当成一个源点,源点到集合中点的距离为t,集合中点到该源点的距离为0,这样建图就是O(n)了。然后分别跑1和n的最短路,枚举各点即可。
AC代码:
#include <bits/stdc++.h>
using namespace std;
#define met(a, b) memset(a, b, sizeof(a))
#define rep(i, a, b) for(int i = a; i < b; i++)
#define per(i, a, b) for(int i = a; i >= b; i--)
#define fi first
#define se second
#define pb push_back
#define mp make_pair
typedef long long ll;
const int maxn = 1e6 + 10;
const int inf = 0x3f3f3f3f;
ll gcd(ll a, ll b) {
return b == 0 ? a : gcd(b, a % b);}
ll lcm(ll a, ll b) {
return a / gcd(a, b) * b;}
ll qPow(ll base, ll n) {ll res = 1; while(n) {
if(n & 1) res *= base; base *= base; n >>= 1;} return res;}
int T, n, m, Head[maxn << 1], edgesNum = 0, t, s, d;
int dis[10][101000];
struct EDGE {
int to, from, w, nex;
} edges[maxn << 2];
void init() {edgesNum = 0; met(Head, -1); for(int i = 0; i <= n + m; i++) dis[0][i] = dis[1][i] = inf;}
void addEdge(int u, int v, int w) {
edges[edgesNum].from = u;
edges[edgesNum].to = v;
edges[edgesNum].w = w;
edges[edgesNum].nex = Head[u];
Head[u] = edgesNum++;
}
void spfa(int s);
int main() {
int cas = 1;
scanf("%d", &T);
while(T--) {
scanf("%d%d", &n, &m);
init();
rep(i, 1, m + 1) {
scanf("%d%d", &t, &s);
rep(j, 0, s) {
scanf("%d", &d);
addEdge(n + i, d, t);
addEdge(d, n + i, 0);
}
}
spfa(1);
spfa(n);
int MIN = inf;
vector<int> v;
v.clear();
rep(i, 1, n + 1) {
// printf("dis[%d] = %d\n", i, dis[0][i]);
// printf("dis[%d] = %d\n", i, dis[1][i]);
int t = max(dis[0][i], dis[1][i]);
if(t < MIN && t != inf) {
v.clear();
MIN = t;
v.pb(i);
} else if(t == MIN && t != inf) {
v.pb(i);
}
}
//sort(v.begin(), v.end());
int len = v.size();
if(MIN != inf) {
printf("Case #%d: %d\n", cas++, MIN);
rep(i, 0, len) {
printf("%d", v[i]);
if(i != len - 1) printf(" ");
}
puts("");
} else {
printf("Case #%d: Evil John\n", cas++);}
}
return 0;
}
void spfa(int s) {
int pos = (s == 1 ? 0 : 1);
bool vis[maxn];
met(vis, false);
dis[pos][s] = 0;
vis[s] = true;
queue<int> q;
while(!q.empty()) q.pop();
q.push(s);
while(!q.empty()) {
int u = q.front();
q.pop();
vis[u] = false;
for(int e = Head[u]; ~e; e = edges[e].nex) {
int v = edges[e].to;
if(dis[pos][v] > dis[pos][u] + edges[e].w) {
dis[pos][v] = dis[pos][u] + edges[e].w;
if(!vis[v]) {
q.push(v);
vis[v] = true;
}
}
}
}
}
文章浏览阅读1.3w次,点赞15次,收藏85次。本文详细描述了如何利用IPv6+域名解析实现远程访问自己的电脑_阿里云ipv6动态域名解析
文章浏览阅读540次。欢迎来到使用强大的编程语言 Swift 以及 UIKit 框架和 OpenAI 令人难以置信的 Davinci 人工智能模型训练您自己的聊天机器人模型的激动人心的旅程。在这个循序渐进的教程中,我们将深入 AI 和应用程序开发的世界,结合尖端技术来训练能够进行有意义对话的聊天机器人模型。想象一下,拥有一个可以理解和响应自然语言的聊天机器人模型,为用户提供个性化和智能的交互。借助 Swift 和 Davinci 模型,我们拥有实现这一目标的完美工具。_ios 集成openai
文章浏览阅读2w次,点赞10次,收藏70次。MySQL8安装详细步骤_centos安装mysql8
文章浏览阅读1.4k次。一、Struts2相关文件配置1.导入jar包:2.配置web.xml文件:<filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> &_struts2登录验证
文章浏览阅读3.4k次,点赞2次,收藏26次。BT问题解决步骤确认问题:需要分清模块(Audio,BT,Power等)声音类问题的大部分是Audio模块的;功耗类问题,优先要求功耗的负责人先进行分析;本地复现:(必现或高概率问题一定要本地复现下)确认复现步骤,排除测试步骤问题(误操作或测试用例不对);对比验证:(必现或高概率问题,最好本地对比验证下)更换对比机,同类型三方apk,车载设备,连接设备;Check Log:需要check测试提供的有效性分析问题以APLog和HCILog为主,log时间点和问题复现需要对应,log_bluetoothphonepolicy
文章浏览阅读3.4k次。使用 pip install gym 命令出现以下错误:##Could not install packages due to an EnvironmentError: [Errno 13] Permission denied: ‘/usr/local/lib/python2.7/dist-packages/_markupbase’Consider using the --user optio..._gym could not install packages due to an environmenterror:
文章浏览阅读1.6k次。C语言_说明局部变量在哪个文件中声明,在哪个文件中给全局变量中赋初值,并举例说明一个全
文章浏览阅读92次。地图投影的选择选择投影的目的在于使所选投影的性质、特点适合于地图的用途,同时考虑地图在图廓范围内变形较小而且变形分布均匀。海域使用的地图多采用保角投影,因其能保持方位角度的正确。我国的基本比例尺地形图(1:5千,1:1万,1:2.5万,1:5万,1:10万,1:25万,1:50万,1:100万)中,大于等于50万的均采用高斯-克吕格投影(Gauss-Kruger),这是一个等角横切椭圆柱投影,..._墨卡托投影标准纬线之前长度缩小,标准纬线之外长度放大
文章浏览阅读1.0k次。各有关单位:为进一步提高并推动高等院校、科研院所及企事业单位在生态环境科学研究中的技术应用水平。“农环视界”公众号组织邀请本领域知名专家定期举办“生态环境科学研究先进技术培训”。通过课程培训提高学科实验、实践技术应用水平并掌握相关先进技术方法。老师讲课会结合实际案例进行内容解析,并配备实操单元进行针对性指导,解决实际问题,拓宽学员的理论知识、提升学员的实际操作能力及相关经验。本期主题:微生物分子..._禇海燕二级教授
文章浏览阅读264次。机器环境[root@linux-node1 ~]# cat /etc/redhat-releaseCentOS Linux release 7.1.1503 (Core)[root@linux-node1 ~]# hostnamelinux-node1.nmap.com[root@linux-node1 ~]#安装net-snmp等工具[root@linux-node1 ~]# yum insta..._net-snmp-utils-5.7.2-24.el7_2.1x86
文章浏览阅读346次,点赞3次,收藏5次。使用Hammerspoon打造你的个性化 macOS 桌面:一个强大的自动化工具项目地址:https://gitcode.com/zuorn/hammerspoon_configHammerspoon 是一款针对macOS的强大扩展工具,它允许用户通过 Lua 脚本来控制和定制操作系统的行为。这个项目提供了一个预配置的 Hammerspoon 配置集合,旨在帮助新手快速上手并体验到 Hamme..._macos 桌面程序自动化
文章浏览阅读906次,点赞21次,收藏11次。为了帮助大家更好的学习网络安全,小编给大家准备了一份网络安全入门/进阶学习资料,里面的内容都是适合零基础小白的笔记和资料,不懂编程也能听懂、看懂,所有资料共282G,朋友们如果有需要全套网络安全入门+进阶学习资源包,可以点击免费领取(如遇扫码问题,可以在评论区留言领取哦)~有需要的小伙伴,可以点击下方链接免费领取或者V扫描下方二维码免费领取CSDN大礼包:全网最全《网络安全入门&进阶学习资源包》免费分享**(安全链接,放心点击)**。