Codeforces Gym101170I:Iron and Coal(建多幅图+多次BFS)***
题意
有n个点,其中有m个点是铁矿,k个点是煤,从1号点出发,你可以派一些士兵跑向不同的点,问占领至少一个铁矿和一个煤的时候,最少需要占领多少个点。
思路
建两幅图,其中一幅是正向边,一幅是反向边。做三次BFS。
第一遍BFS:从1号点BFS一遍整个正向边的图,记录数组dis[0][i]为每个点距离1号点的距离。O(n)
第二遍BFS:从每个铁矿BFS一遍整个反向边的图,记录数组dis[1][i]为每个点距离每个铁矿的最近距离。O(n)
第三遍BFS:从每个煤BFS一遍整个反向边的图,和第二遍类似。
对于每个点,三个dis数组求和就是从一号点到最近的铁矿和最近的煤的距离和。
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
const int INF = 0x3f3f3f3f;
vector<int> g[2][N];
int o[N], c[N], b[2] = {1, 1}, dis[3][N];
void bfs(int e, int n, int p[], int id) {
queue<int> que; while(!que.empty()) que.pop();
memset(dis[id], INF, sizeof(dis[id]));
for(int i = 1; i <= n; i++) que.push(p[i]), dis[id][p[i]] = 0;
while(!que.empty()) {
int u = que.front(); que.pop();
for(int i = 0; i < g[e][u].size(); i++) {
int v = g[e][u][i];
if(dis[id][v] != INF) continue;
dis[id][v] = dis[id][u] + 1;
que.push(v);
}
}
}
int main() {
int n, m, k; scanf("%d%d%d", &n, &m, &k);
for(int i = 1; i <= m; i++) scanf("%d", &o[i]);
for(int i = 1; i <= k; i++) scanf("%d", &c[i]);
for(int i = 0; i < 2; i++) for(int j = 1; j <= n; j++) g[i][j].clear();
for(int i = 1; i <= n; i++) {
int a; scanf("%d", &a);
for(int j = 1; j <= a; j++) {
int v; scanf("%d", &v);
g[0][i].push_back(v);
g[1][v].push_back(i);
}
}
bfs(0, 1, b, 0);
bfs(1, m, o, 1);
bfs(1, k, c, 2);
int ans = INF;
for(int i = 1; i <= n; i++) {
// printf("%d : %d - %d - %d\n", i, dis[0][i], dis[1][i], dis[2][i]);
if(dis[0][i] == INF || dis[1][i] == INF || dis[2][i] == INF) continue;
ans = min(ans, dis[0][i] + dis[1][i] + dis[2][i]);
}
if(ans == INF) puts("impossible");
else printf("%d\n", ans);
return 0;
}
Codeforces Gym101170I:Iron and Coal(建多幅图+多次BFS)***的更多相关文章
- Gym 101170I Iron and Coal(BFS + 思维)题解
题意:有一个有向图,有些点是煤,有些点是铁,但不会同时有铁和煤.现在我要从1出发,占领可以到达的点.问最少占领几个点能同时拥有一个煤和一个铁(1不用占领). 思路:思路很秀啊.我们从1往外bfs,得到 ...
- Hadoop阅读笔记(四)——一幅图看透MapReduce机制
时至今日,已然看到第十章,似乎越是焦躁什么时候能翻完这本圣经的时候也让自己变得更加浮躁,想想后面还有一半的行程没走,我觉得这样“有口无心”的学习方式是不奏效的,或者是收效甚微的.如果有幸能有大牛路过, ...
- 图说Java —— 理解Java机制最受欢迎的8幅图
原文链接: Top 8 Diagrams for Understanding Java 翻译人员: 铁锚 翻译时间: 2013年10月29日 世间总是一图胜过千万言! 下面的8幅图来自于 Progr ...
- 一幅图概括Android测试的方方面面
一幅图概括Android测试的方方面面,来自网络: 另外的一些测试技巧 1,测试应用程序时,环境是很大的一个影响因素:系统时间,网络情况,异常关闭等 2,测试应用程序时,第三方嵌入程序也是有影响的.如 ...
- 理解Java机制最受欢迎的8幅图
原文链接: Top 8 Diagrams for Understanding Java 翻译人员: 铁锚 翻译时间: 2013年10月29日 世间总是一图胜过千万言! 下面的8幅图来自于 Progr ...
- maltab-图像拼接(左右两幅图)
图像拼接 参考自 https://blog.csdn.net/m0_37565736/article/details/79865990 并修改了其中错误的地方,添加自己的讲解或者看法. 我要拼接的是一 ...
- 一幅图秒懂LoadAverage(负载)
转自:http://www.habadog.com/2015/02/27/what-is-load-average/ 一幅图秒懂LoadAverage(负载) 一.什么是Load Average? ...
- Matlab绘图基础——利用axes(坐标系图形对象)绘制重叠图像 及 一图多轴(一幅图绘制多个坐标轴)
描述 axes在当前窗口中创建一个包含默认属性坐标系 axes('PropertyName',propertyvalue,...)创建坐标系时,同时指定它的一些属性,没有指定的使用DefaultAxe ...
- 一幅图秒懂LoadAverage(转载)
转自:http://www.habadog.com/2015/02/27/what-is-load-average/ 一幅图秒懂LoadAverage(负载) 一.什么是Load Average? ...
随机推荐
- 脚本 启动/停止 jar包服务
windows (.bat): @set port=8692 @echo %port% for /f "tokens=5" %%i in ('netstat -aon ^| fin ...
- 2019 renew 博客目录
.net && .net core Microsoft.AspNet.SignalR实现弹幕(即时通讯) C#调用JS httpclient POST请求(urlencoded) 二维 ...
- COM编程基础(C++)
转自:http://www.yesky.com/20020715/1620482_1.shtml (作为一个初学者,觉得本文挺好,推荐给大家) 这篇文章是给初学者看的,尽量写得比较通俗易懂,并且尽量避 ...
- jquery QQ微博
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- RelativeSource 简述
原文:RelativeSource 简述 RelativeSource实现标记扩展,以描述绑定源相对于绑定目标的位置. <Binding> <Binding.RelativeSour ...
- Pytorch Code积累
2017 Python最新面试题及答案16道题 15个重要Python面试题 测测你适不适合做Python? torch.squeeze() Returns a tensor with all the ...
- 【shell】递归函数----调用自身的函数
什么是递归函数? 一句话,调用自己的函数称为递归函数! #!/bin/bash declare -i count checkoutCount(){ read -p "Enter an cou ...
- Win8 Metro(C#)数字图像处理--2.42图像光照效果算法
原文:Win8 Metro(C#)数字图像处理--2.42图像光照效果算法 [函数名称] 图像光照效果 SunlightProcess(WriteableBitmap src,int X,in ...
- Qt在Windows上的调试器CDB安装与配置
如果安装Qt时使用的是Visual Studio的预编译版,那么很有可能就会缺少调试器(Debugger),而使用MSVC的Qt对应的原生调试器是CDB(对应MinGW的Qt使用GDB调试器).本文介 ...
- Win10《芒果TV》更新v3.8.0初夏版:全新视觉体验,即刻分享视频
历时半年多昼夜,千呼万唤始出来,Win10版<芒果TV>全平台同步更新初夏版v3.8.0,统一视觉体验,完善分享投屏,进一步提升使用体验. Win10版<芒果TV>V3.8.0 ...