【16届蓝桥杯寒假刷题营】第1期DAY4

news2025/5/9 16:33:39

4.可达岛屿的个数 - 蓝桥云课

题目背景

在一个神奇的魔法世界中,有一座古老的迷幻之城。迷幻之城被分成 n 个鸟屿,编号从 1 到 n,共有 m 座桥。迷幻之城的居民们希望能够建立起紧密的联系,每个岛屿上的居民都想知道自己最多能到达多少个岛屿。

请你编写程序解决这个问题。

输入格式

第一行包含两个整数 n 和 m (1≤n≤105,0≤m≤min105,2n(n−1)​),表示鸟屿的数量和桥的数量。接下来 m 行,每行包含两个整数 ui​,vi​ (1≤ui​,vi​≤n),表示编号为 ui​ 和 vi​ 的岛屿之间有一座桥。

输出格式

输出一行包含 n 个以空格分隔的整数,第 i 个整数表示编号为 i 的鸟屿上的居民最多能到达的鸟屿个数。

样例输入

6 3
1 2
4 5
2 6

样例输出

3 3 1 2 2 3

思路:

暴力,每一个点开始搜索,然后记录经过多少个点。
代码如下:

#include <iostream>
#include <vector>
#include<queue>
#include <algorithm>
#include <cstring>
using namespace std;
typedef long long ll;
const ll N = 1e5+10;
ll n,m,tot,sum;
ll head[N];
bool vis[N];
ll distant[N];
struct Edge{
	ll next;
	ll to;
}e[2*N];
void add(ll u,ll v)
{
	tot++;
	e[tot].next = head[u];
	e[tot].to = v;
	head[u] = tot;
} 
void dfs(ll cur)
{
	if(vis[cur])
	return;
	vis[cur] = true;
	sum++;
	ll u = head[cur];
	while(u != -1)
	{
		ll to = e[u].to;
		dfs(to);
		u = e[u].next;
	}
}
int main() 
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0); 	
	cin >> n >> m;
	memset(head,-1,sizeof(head));
	for(ll i = 1 ; i <= m ; i++)
	{
		ll u,v;
		cin >> u >> v;
		add(u,v);
		add(v,u);
	}
	for(ll i = 1 ; i <= n ; i++)
	{
		sum = 0;
		memset(vis,false,sizeof(vis));
		dfs(i);
		distant[i] = sum;
	}
	for(ll i = 1 ; i <= n ; i++)
	cout << distant[i] << " ";
	return 0;
}

思路:

每一次搜过的点,这些点的能到达的岛都是一样的。其他一样。但是还是超时

代码如下:
 

#include <iostream>
#include <vector>
#include<queue>
#include <algorithm>
#include <cstring>
using namespace std;
typedef long long ll;
const ll N = 1e5+10;
ll n,m,tot,sum;
ll head[N];
bool vis[N];
ll distant[N];
struct Edge{
	ll next;
	ll to;
}e[2*N];
void add(ll u,ll v)
{
	tot++;
	e[tot].next = head[u];
	e[tot].to = v;
	head[u] = tot;
} 
void dfs(ll cur)
{
	if(vis[cur])
	return;
	vis[cur] = true;
	sum++;
	ll u = head[cur];
	while(u != -1)
	{
		ll to = e[u].to;
		dfs(to);
		u = e[u].next;
	}
}
int main() 
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0); 	
	cin >> n >> m;
	memset(head,-1,sizeof(head));
	for(ll i = 1 ; i <= m ; i++)
	{
		ll u,v;
		cin >> u >> v;
		add(u,v);
		add(v,u);
	}
	for(ll i = 1 ; i <= n ; i++)
	{
		sum = 0;
		memset(vis,false,sizeof(vis));
		if(vis[i])continue;
		dfs(i);
		for(ll j = 1 ; j <= n ; j++)
		{
			if(vis[j])
			distant[j] = sum;
		}
	}
	for(ll i = 1 ; i <= n ; i++)
	cout << distant[i] << " ";
	return 0;
}

思路3:

因为遍历vis数组会变成O(N*N),所以肯定会超时,所以我是用vector,将联通的岛(点)存进去,最后遍历复制,简短时间。过了。

#include <iostream>
#include <vector>
#include<queue>
#include <algorithm>
#include <cstring>
using namespace std;
typedef long long ll;
vector <ll> arr;
const ll N = 1e5+10;
ll n,m,tot,sum;
ll head[N];
bool vis[N];
ll distant[N];
struct Edge{
	ll next;
	ll to;
}e[2*N];
void add(ll u,ll v)
{
	tot++;
	e[tot].next = head[u];
	e[tot].to = v;
	head[u] = tot;
} 
void dfs(ll cur)
{
	if(vis[cur])
	return;
	vis[cur] = true;
	arr.push_back(cur);
	sum++;
	ll u = head[cur];
	while(u != -1)
	{
		ll to = e[u].to;
		dfs(to);
		u = e[u].next;
	}
}
int main() 
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0); 	
	cin >> n >> m;
	memset(head,-1,sizeof(head));
	for(ll i = 1 ; i <= m ; i++)
	{
		ll u,v;
		cin >> u >> v;
		add(u,v);
		add(v,u);
	}
	for(ll i = 1 ; i <= n ; i++)
	{
		sum = 0;
		memset(vis,false,sizeof(vis));
		arr.clear();
		if(distant[i])continue;
		dfs(i);
		for(ll j = 0 ; j < arr.size() ; j++)
		{
			distant[arr[j]] = sum; 
		}
	}
	for(ll i = 1 ; i <= n ; i++)
	cout << distant[i] << " ";
	return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2299890.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CAN学习记录

CAN(Controller Area Network),是ISO国际标准化的串行通信协议&#xff0c;为了满足汽车产业的“减少线束的数量”、“通过多个LAN&#xff0c;进行大量数据的高速通信”的需求 低速CAN&#xff08;ISO11519)通信速率10~125kbps&#xff0c;总线长度可达1000米 高速CAN&#…

滑动窗口算法篇:连续子区间与子串问题

1.滑动窗口原理 那么一谈到子区间的问题&#xff0c;我们可能会想到我们可以用我们的前缀和来应用子区间问题&#xff0c;但是这里对于子区间乃至子串问题&#xff0c;我们也可以尝试往滑动窗口的思路方向去进行一个尝试&#xff0c;那么说那么半天&#xff0c;滑动窗口是什么…

001-监控你的文件-FSWatch-C++开源库108杰

fswatch 原理与应用简介fswatch 安装fswatch 实践应用具体应用场景与细节补充 1. 简介 有些知识&#xff0c;你知道了不算厉害&#xff0c;但你要是不知道&#xff0c;就容易出乱。 很多时候&#xff0c;程序需要及时获取磁盘上某个文件对象&#xff08;文件夹、文件&#xff0…

SpringMVC环境搭建

文章目录 1.模块创建1.创建一个webapp的maven项目2.目录结构 2.代码1.HomeController.java2.home.jsp3.applicationContext.xml Spring配置文件4.spring-mvc.xml SpringMVC配置文件5.web.xml 配置中央控制器以及Spring和SpringMVC配置文件的路径6.index.jsp 3.配置Tomcat1.配置…

ESXi安装【真机和虚拟机】(超详细)

项目简介&#xff1a; ESXi&#xff08;Elastic Sky X Integrated&#xff09;是VMware公司开发的一种裸机虚拟化管理程序&#xff0c;允许用户在单一物理服务器上运行多个虚拟机&#xff08;VM&#xff09;。它直接安装在服务器硬件上&#xff0c;而不是操作系统之上&#xff…

学习笔记之debian的thonny开发(尚未验证)--从stm32裸机到linux嵌入式系统

这应该算 stm32裸机用户 转 linux嵌入式系统 的入门学习笔记。 【鲁班猫】39-vnc远程桌面连接鲁班猫_哔哩哔哩_bilibili 本集的鲁班猫的视频介绍中&#xff0c;没有清晰明确指出需要linux开发板接入网络&#xff0c;接入网络可以使用有线网口或者wifi路由&#xff0c;有些提示…

「软件设计模式」桥接模式(Bridge Pattern)

深入解析桥接模式&#xff1a;解耦抽象与实现的艺术 一、模式思想&#xff1a;正交维度的优雅解耦 桥接模式&#xff08;Bridge Pattern&#xff09;通过分离抽象&#xff08;Abstraction&#xff09;与实现&#xff08;Implementation&#xff09;&#xff0c;使二者可以独立…

Jenkins 安装插件 二

Jenkins 安装插件 二 一. 打开 Dashboard 打开 Jenkins 界面&#xff0c;不管在任何界面&#xff0c;只需要点击左上角 Dashboard 按钮即可 二. 打开 Manage Jenkins 找到 Manage Jenkins -> System Configuration -> Plugins 点击 Plugins 打开界面如下 Updates&a…

CI/CD(二)docker-compose安装Jenkins

1、docker-compose.yml version: 3.8services:jenkins:image: jenkins/jenkins:lts # 使用官方的 Jenkins LTS 镜像container_name: jenkinsuser: root # 如果需要以 root 用户运行ports:- "8080:8080" # Jenkins Web 界面端口- "50000:50000" # 用于 Jen…

Windows环境安装部署minimind步骤

Windows环境安装部署minimind步骤 必要的软件环境 git git&#xff0c;可下载安装版&#xff0c;本机中下载绿色版&#xff0c;解压到本地目录下&#xff08;如&#xff1a;c:\soft\git.win64&#xff09;&#xff0c;可将此路径添加到PATH环境变量中&#xff0c;供其他程序…

Qt信号槽调用出错:Qt: Dead lock detected while activating a BlockingQueuedConnection

目录 1.现象和原因分析 2. 总结 1.现象和原因分析 就在最近的开发过程中&#xff0c;程序一运行在控制台就打印&#xff1a; Qt: Dead lock detected while activating a BlockingQueuedConnection&#xff1a; 咋一看&#xff0c;怎么出现死锁了呢&#xff1f;仔细看下…

应对DeepSeek总是服务器繁忙的解决方法

最近由于访问量过大&#xff0c;DeepSeek服务器官网经常弹出&#xff1a;“服务器繁忙&#xff0c;请稍后再试”的提示&#xff0c;直接卡成PPT怎么办&#xff1f;服务器繁忙直接看到视觉疲劳&#xff1a; 解决DeepSeek卡顿问题 DeepSeek使用卡顿问题&#xff0c;是因为访问量…

仿叮咚买菜鸿蒙原生APP

# DingdongShopping 这是一个原生鸿蒙版的仿叮咚买菜APP项目 鸿蒙Next发布至今已经有一年多的时间了&#xff0c;但有时候我们想要实现一些复杂的功能或者效果&#xff0c;在开发文档上查阅一些资料还是比较费时的&#xff0c;有可能还找不到我们想要的内容。而社会层面上分享…

HarmonyOS NEXT网络状态监听HTTP和RCP请求网络

当我们在HarmonyOS NEXT中开发的应用&#xff0c;基本上都会使用网络请求&#xff0c;从服务端获取数据在客户端显示或者供用户交互&#xff0c;有时候网络发生变化时&#xff0c;我们需要做一些相应的操作&#xff0c;接下来我们一起来了解下在HarmonyOS NEXT下如何监听网络状…

2025.2.16

Web [GDOUCTF 2023]泄露的伪装&#xff1a; 点进去看就是装神弄鬼&#xff0c;那就直接扫描 果然有东西 第一个是php代码 第二个是个文件 访问发现是一样的 分析一下&#xff1a;使用 file_get_contents($cxk) 函数读取 $cxk 变量中指定的 URL 或文件的内容。 如果读取的内…

python学opencv|读取图像(六十五)使用cv2.boundingRect()函数实现图像轮廓矩形标注

【1】引言 前序学习进程中&#xff0c;已经使用cv2.findContours()函数cv2.drawContours()函数实现图像轮廓识别和标注&#xff0c;这种标注沿着图像的轮廓进行&#xff0c;比较细致。相关文章链接为&#xff1a; python学opencv|读取图像&#xff08;六十四&#xff09;使用…

haproxy实现MySQL服务器负载均衡

1.环境准备 准备好下面四台台服务器&#xff1a; 主机名IP角色open-Euler1192.168.121.150mysql-server1openEuler-2192.168.121.151mysql-server2openEuler-3192.168.121.152clientRocky8-1192.168.121.160haproxy 2.mysql服务器配置 1.下载mariadb #下载mariadb [rootop…

C语言简单练习题

文章目录 练习题一、计算n的阶乘bool类型 二、计算1!2!3!...10!三、计算数组arr中的元素个数二分法查找 四、动态打印字符Sleep()ms延时函数system("cls")清屏函数 五、模拟用户登录strcmp()函数 六、猜数字小游戏产生一个随机数randsrandRAND_MAX时间戳time() 示例 …

C语言之easyX

目录 概要 easyX整体架构 图形绘制 画布宽高 圆形 图片的贴图 加载图像 游戏框架 概要 easyX是一个轻量级的图形库&#xff0c;用于在Windows平台上进行简单的2D图形绘制。它提供了一组简单易用的函数&#xff0c;可以方便地绘制基本的图形元素&#xff0c;如线条、矩形、圆形…

10. Hbase Compaction命令

一. 什么是Compaction 在 HBase 中&#xff0c;频繁进行数据插入、更新和删除操作会生成许多小的 HFile&#xff0c;当 HFile 数量增多时&#xff0c;会影响HBase的读写性能。此外&#xff0c;垃圾数据的存在也会增加存储需求。因此&#xff0c;定期进行 Compact操作&#xff…