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? ...
随机推荐
- 设置oracle密码不过期,修改用户密码
1. 查看用户名使用的profile select username,profile from dba_usersSELECT * FROM dba_profiles WHERE profile='D ...
- Android开发四大件
四大组件 Activity Activity是Android应用程序的界面,比如查看联系人.打电话.玩游戏的界面等一个应用程序通常包含多个Activity,即多个界面Activity通过布局管理各种V ...
- C# 自定义泛型类,并添加约束
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threa ...
- 在vs2015上使用asp.net core+ef core
官方的文档https://docs.asp.net/en/latest/tutorials/first-mvc-app/start-mvc.html 先来看一下实现的效果
- PHP 实现自动加载器(Autoloader)
我们知道PHP可以实现自动加载,避免了繁重的体力活,代码更规范,整洁.那如果我们把这个自动加载再升华一下,变成自动加载类,每次只需要引入这个类,那么其他类就自动加载了,已经开源,仓库地址在这里.同时如 ...
- C#关于多线程的笔记
Thread thNetwork; thNetwork = new Thread(new ThreadStart(GetNetworkInfo));//创建一个线程 thNetwork.Start() ...
- virtualbox 安装 extension pack 方法以及出现 "The installer failed with exit code 1: VBoxExtPackHelperApp.exe: error: Failed to rename the temporary directory to the final one"的解决办法
virtualbox 的版本:5.1.26 下载地址:https://www.virtualbox.org/wiki/Downloads extension pack 的版本:5.1.26 ...
- 通过Graphics对象获取它所属的Control
using System.Runtime.InteropServices; [DllImport("user32.dll")] public static extern Int ...
- ASP.NET MVC3在Visual Studio 2010中的变化
在VS2010中新建一个MVC3项目可以看出与以往的MVC2发生了很明显的变化 1.ASP.NET MVC3必要的运行环境为.NET 4.0 (想在3.5用MVC3,没门!) 2.默认MVC3模板项目 ...
- python 原理
Python原理--总结 基础数据类型: 字符串: upper,lower,startwith,endswith,replace,strip,split,count,isdigit,index ...