天梯赛红色警报(连通分量)

团体程序设计天梯赛竞赛题--进阶题【L2-013 红色警报】 进阶级 4 道题,每道题 25 分,满分为 100 分。 阅读详情

战争中保持各个城市间的连通性非常重要。本题要求你编写一个报警程序,当失去一个城市导致国家被分裂为多个无法连通的区域时,就发出红色警报。注意:若该国本来就不完全连通,是分裂的k个区域,而失去一个城市并不改变其他城市之间的连通性,则不要发出警报。

输入格式:

输入在第一行给出两个整数N(0 < N <=500)和M(<=5000),分别为城市个数(于是默认城市从0到N-1编号)和连接两城市的通路条数。随后M行,每行给出一条通路所连接的两个城市的编号,其间以1个空格分隔。在城市信息之后给出被攻占的信息,即一个正整数K和随后的K个被攻占的城市的编号。

注意:输入保证给出的被攻占的城市编号都是合法的且无重复,但并不保证给出的通路没有重复。

输出格式:

对每个被攻占的城市,如果它会改变整个国家的连通性,则输出“Red Alert: City k is lost!”,其中k是该城市的编号;否则只输出“City k is lost.”即可。如果该国失去了最后一个城市,则增加一行输出“Game Over.”。

一开始把题目想难了,想到关节点算法去了,那个又好复杂,码不出来,但是又想着直接暴力搜索判断连通分量个数怕超时,一直犹豫,本着混分的思想就这样写了。没想到的是,竟然就这么过了。。。 (天梯的数据真有人道主义精神)

若删除一个城市,但是连通数量大于之前的连通数量,那么肯定就导致了原本的连通性被破坏,而如果小于原来的连通量,那只有一种可能,就是删除的那个城市原来就是孤立的城市。 所以直接用简单的DFS类似于染色问题一样求出有多少个连通分量即可,用 pre < now,则发出警报。

#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;

const int maxn = 500+10;
int G[maxn][maxn];
int n,m;
int vis[maxn]; //标记是否删除 = 1为已删除
int vis2[maxn]; //标记是否访问
void dfs(int x,int color){
    for(int i = 0; i < n; ++i){
        if(G[x][i] != -1 && !vis[i] && !vis2[i]){
            vis2[i] = color;
            dfs(i,color);
        }
    }
}
int main(){
     //freopen("/Users/user/Desktop/in.txt","r",stdin);
    memset(G,-1,sizeof(G));
    scanf("%d%d", &n,&m);
    for(int i = 0; i < m; ++i){
        int f,t; 
        scanf("%d%d", &f,&t);
        G[f][t] = G[t][f] = 1;
    }
    int op;
    int ncity = n;
    int color = 0;
    for(int j = 0; j < n; ++j){
        if(!vis2[j]){ // 未被染色
            color++;
            dfs(j,color);
        }
    }
    scanf("%d", &op);
    for(int i = 0; i < op; ++i){
        memset(vis2,0,sizeof(vis2));
        int city; 
        scanf("%d",&city);
        vis[city] = 1;
        ncity--; // 剩余城市数
        int pre = color; // 记录之前的连通分量
        color = 0;
        for(int j = 0; j < n; ++j){
            if(!vis[j] && !vis2[j]){ // 未被染色并且未被删除
                color++;
                dfs(j,color); 
            }
        }
        bool flag = false;
        if(pre < color) flag = true;
        if(!flag)
            printf("City %d is lost.\n", city);
        else{
            printf("Red Alert: City %d is lost!\n", city);
        }
    }
    if(ncity == 0)
        printf("Game Over.\n");
    return 0;
}
ESP32开发环境避坑指南:用Thonny烧录MicroPython固件时常见的5个错误及解决方法 本文针对ESP32开发新手,详细解析了使用Thonny IDE烧录MicroPython固件时最常见的5个错误及其解决方案。内容涵盖驱动安装、端口识别、固件烧录失败、版本兼容性、连接不稳定以及文件系统操作异常等核心痛点,并提供硬件层面的深度排查指南,帮助开发者高效搭建稳定的ESP32开发环境。 阅读详情

相关推荐

一文详解数据仓库、数据湖、湖仓一体和数据网格

本文对数据仓库、数据湖、湖仓一体、数据网格四个技术概念进行了辨析,并对它们的优势和局限给出了对比介绍。

oOBubbleX的博客 2594

红色警报 天梯赛 (并查集)

红色警报   战争中保持各个城市间的连通性非常重要。本题要求你编写一个报警程序,当失去一个城市导致国家被分裂为多个无法连通的区域时,就发出红色警报。注意:若该国本来就不完全连通,是分裂的k个区域,而失去一个城市并不改变其他城市之间的连通性,则不要发出警报。 输入格式: 输入在第一行给出两个整数N(0  N \le≤ 500)和M(\le≤ 5000),分别为城市个数(于是默认

Coding 1948

语义通信实战:跳过“比特”保“语义”,手把手构建轻量级图像压缩重建网络(基于PyTorch)

本文详细介绍了基于PyTorch的轻量级语义通信系统LICRnet的实现,专注于图像压缩重建中的语义信息保留。通过深度可分离卷积、可变窗口多尺度注意力等创新技术,显著降低计算量并提升性能,特别适用于无人机巡检、远程医疗等物联网场景。文章包含完整的代码实现、训练策略及部署优化方案。

weixin_27697385的博客 221

【PTA】7-39 红色警报

题目重述 战争中保持各个城市间的连通性非常重要。本题要求你编写一个报警程序,当失去一个城市导致国家被分裂为多个无法连通的区域时,就发出红色警报。注意:若该国本来就不完全连通,是分裂的k个区域,而失去一个城市并不改变其他城市之间的连通性,则不要发出警报。 输入格式: 输入在第一行给出两个整数N(0 < N ≤ 500)和M(≤ 5000),分别为城市个数(于是默认城市从0到N-1编号)和连接两...

阳光大男孩!!!的博客 924

GEE:提取研究区 NDVI/LST/RVI 并进行时间序列线性插值填补缺失像素和Savitsky-Golay(SG)滤波平滑处理

养乐多_本文将介绍使用Landsat数据集,构建时间序列,并使用线性插值算法填补缺失数据,或者去云空洞,并进一步对完整的时间序列数据进行SG滤波处理。

养乐多的博客 3196

CodeX 登录报错 os error 10013?一键修复 CodeX 无法登录问题(亲测有效)

CodeX 登录时报 os error 10013?本文提供快速修复方案,实测有效,彻底解决登录报错:登录失败:failed to start login server: 以一种访问权限不允许的方式做了一个访问套接字的尝试。 (os error 10013)的问题💡

XiaoqiangClub的博客 2924

红色警报,战争中保持各个城市间的连通性非常重要。(c++)

题目描述: 战争中保持各个城市间的连通性非常重要。本题要求你编写一个报警程序,当失去一个城市导致国家被分裂为多个无法连通的区域时,就发出红色警报。注意:若该国本来就不完全连通,是分裂的k个区域,而失去一个城市并不改变其他城市之间的连通性,则不要发出警报。 输入格式: 输入在第一行给出两个整数N(0 < N ≤ 500)和M(≤ 5000),分别为城市个数(于是默认城市从0到N-1编号)和连接两城市的通路条数。随后M行,每行给出一条通路所连接的两个城市的编号,其间以1个空格分隔。在城市信息之后给出

Adyczb的博客 3068

Ubuntu系统下MRIcroN、FSL6.0.5、Freesurfer7.1.1、ANTs、MRtrix3、AFNI的安装详解——核磁共振数据处理必备

Ubuntu系统下MRIcroN、FSL6.05、Freesurfer7.1.1、MRtrix3、AFNI、ANTs的安装详解一、安装MRIcroN二、 FSL6.0.5完整安装与FSLeyes等Not Found修复Anaconda与虚拟环境(所有操作均在root下)获取最新版Anaconda3安装Anaconda3配置所有用户可用去掉恼人的base创建虚拟环境FSL与FSLeyes安装(所有操作均在root下)下载FSL安装FSL添加环境变量到/etc/bash.bashrc末尾 (ubuntu)或者

从事脑科学核磁共振方法学研究,在Nature communications等权威期刊发表研究论文,熟练掌握磁共振处理方法和统计学方法,欢迎大家和我交流。 6085

L2-013 红色警报 (25 分)

战争中保持各个城市间的连通性非常重要。本题要求你编写一个报警程序,当失去一个城市导致国家被分裂为多个无法连通的区域时,就发出红色警报。注意:若该国本来就不完全连通,是分裂的k个区域,而失去一个城市并不改变其他城市之间的连通性,则不要发出警报。 输入格式: 输入在第一行给出两个整数N(0 < N ≤ 500)和M(≤ 5000),分别为城市个数(于是默认城市从0到N-1编号)和连接两城市的通路条数。随后M行,每行给出一条通路所连接的两个城市的编号,其间以1个空格分隔。在城市信息之后给出被攻占的信息,即一

一只懒猫的博客 2469

ZED双目相机环境配置

ZED SDK 安装文件夹中有一个 Python 脚本(get_python_api.py),可以自动检测操作系统、CUDA 和 Python 版本并下载相应的预编译 Python API 包(pyzed)。安装SDK成功后,我们进入ZED SDK文件夹中的tools子文件夹,运行ZED Explorer.exe 以及 ZED Depth Viewer.exe,查看ZED相机是否能正常启用工作。在本例中,我们简单地检索ZED相机的序列号:打开 ZED相机,然后打印其序列号,然后关闭相机。

qq_53545309的博客 2136

【二】MADDPG多智能体算法实现(parl)【追逐游戏复现】

论文全称:Multi-Agent Actor-Critic for Mixed Cooperative-Competitive Environments 论文原文:https://download.youkuaiyun.com/download/sinat_39620217/16203960 论文翻译:https://blog.youkuaiyun.com/qiusuoxiaozi/article/details/79066612 ...

丨汀、的博客 2万+

PTA:7-123 红色警报 (25分)(并查集+解析)

7-123 红色警报 (25分) 战争中保持各个城市间的连通性非常重要。本题要求你编写一个报警程序,当失去一个城市导致国家被分裂为多个无法连通的区域时,就发出红色警报。注意:若该国本来就不完全连通,是分裂的k个区域,而失去一个城市并不改变其他城市之间的连通性,则不要发出警报。 输入格式: 输入在第一行给出两个整数N(0 < N ≤ 500)和M(≤ 5000),分别为城市个数(于是默认城市从...

zlzhujust@gmail.com 3097

【软考高项】【计算专题】- 3 - 进度类 - 双代号网络图

共需压缩 20 天。在双代号网络图中,工作一般使用箭线表示,任意一条箭线都需要占用时间、消耗资源,工作名称写在箭线的上方,而消耗的时间则写在箭线的下方或者工作后面。反映的是前后工作的交接点,节点中的编号可以任意编写,但应保证后续工作的节点比前面节点的编号大,即上图图中的1⃣️4⃣️ 即表示 B 活动和 D 活动间有依赖关系,D 活动的开始,依赖 B 活动的结束。B活动完成了一半, 各计划的实际支出为A活动6500元, B活动1000元, C活动280元, D。

欢迎来到我的博客,一起探索代码里的世界! 4561

PTA 天梯赛练习 红色警报(BFS求连通分量)

PTA 天梯赛练习 红色警报(BFS求连通分量) 题目连接 战争中保持各个城市间的连通性非常重要。本题要求你编写一个报警程序,当失去一个城市导致国家被分裂为多个无法连通的区域时,就发出红色警报。注意:若该国本来就不完全连通,是分裂的k个区域,而失去一个城市并不改变其他城市之间的连通性,则不要发出警报。 输入格式: 输入在第一行给出两个整数N(0 &lt; N ≤ 500)和M(≤ 5000...

pqdong的博客 819

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

团体程序设计天梯赛 L2-013 红色警报(连通分量)

分数 25战争中保持各个城市间的连通性非常重要。本题要求你编写一个报警程序,当失去一个城市导致国家被分裂为多个无法连通的区域时,就发出红色警报。注意:若该国本来就不完全连通,是分裂的k个区域,而失去一个城市并不改变其他城市之间的连通性,则不要发出警报。

X_StarX的博客 968

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

L2-013. 红色警报-PAT团体程序设计天梯赛(图的连通分量个数统计)

L2-013. 红色警报 战争中保持各个城市间的连通性非常重要。本题要求你编写一个报警程序,当失去一个城市导致国家被分裂为多个无法连通的区域时,就发出红色警报。注意:若该国本来就不完全连通,是分裂的k个区域,而失去一个城市并不改变其他城市之间的连通性,则不要发出警报。 输入格式: 输入在第一行给出两个整数N(0 注意:输入保证给出的被攻占的城市编号都是合法的且无重复,但并

dingyihui2016的博客 646

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

PTA团体程序设计天梯赛-练习集 L2-013 红色警报(图的连通分量)

战争中保持各个城市间的连通性非常重要。本题要求你编写一个报警程序,当失去一个城市导致国家被分裂为多个无法连通的区域时,就发出红色警报。注意:若该国本来就不完全连通,是分裂的k个区域,而失去一个城市并不改变其他城市之间的连通性,则不要发出警报。 输入格式: 输入在第一行给出两个整数N(0 < N ≤ 500)和M(≤ 5000),分别为城市个数(于是默认城市从0到N-1编号)和连接两城市的通路条数。随后M行,每行给出一条通路所连接的两个城市的编号,其间以1个空格分隔。在城市信息之后给出被攻占的信息,即一

一粒大榴莲的博客 420

天梯赛L2-13 红色警报-Python语言详细题解

天梯赛L2第13题-红色警报,考察图的连通性,用bfs或者dfs可以完美解决

Ice_cream_0712的博客 332

团体程序设计天梯赛 L2-013 红色警报 (Java)

战争中保持各个城市间的连通性非常重要。本题要求你编写一个报警程序,当失去一个城市导致国家被分裂为多个无法连通的区域时,就发出红色警报。注意:若该国本来就不完全连通,是分裂的k个区域,而失去一个城市并不改变其他城市之间的连通性,则不要发出警报。

weixin_43897853的博客 425

天梯赛L2-013红色警报(并查集计算图的连通分量)

#include <iostream> using namespace std; const int N = 510, M = 5010; int n, m; int f[N]; struct edge{ int a, b; }e[M]; int find(int x) { if(f[x] != x) f[x] = find(f[x]); return f[x]; } int main() { cin >> n >> m; f

Ybibabo__的博客 239

L2-013. 红色警报-PAT团体程序设计天梯赛GPLT(图的连通分量个数统计)

L2-013. 红色警报 战争中保持各个城市间的连通性非常重要。本题要求你编写一个报警程序,当失去一个城市导致国家被分裂为多个无法连通的区域时,就发出红色警报。注意:若该国本来就不完全连通,是分裂的k个区域,而失去一个城市并不改变其他城市之间的连通性,则不要发出警报。 输入格式: 输入在第一行给出两个整数N(0 注意:输入保证给出的被攻占的城市编号都是合法的且无重复,但并不保

柳婼 の blog 3753

天梯赛团体设计L2-013 红色警报

现在的我连算法都判断不出来,,,,,这次做题过程主要是,看题目,不会,感觉像着色问题,但是不是很会下手,总共也就是看了个题目,然后ai看到ai思考过程中有并查集,发现确实好像,最后还是看的dfs,然后开始想看代码理解,,,,好困,,,,,,,,,(~_~)就开始将变量打出来,在前面输入输出打出来,然后看count函数,发现懂了,dfs也就更容易理解了,但是虽然是看ai但没有照抄,出来了一大堆问题,总的来说解决完发现,整体过了4,5遍才过,觉得再打一遍,不看参考,然后就好啦!

ever37的博客 177

天梯赛 L2 红色警报

题目链接:点击打开链接思路:每失去一个城市,判断连通分量是否增加,若增加,则发出红色警报。#include &lt;cstdio&gt; #include &lt;cstring&gt; #include &lt;iostream&gt; #include &lt;queue&gt; using namespace std; int n,m,map[505][505]; int book[505]...

不忘初心 452

天梯赛L2-013 红色警报

L2-013 红色警报 (25 分) 战争中保持各个城市间的连通性非常重要。本题要求你编写一个报警程序,当失去一个城市导致国家被分裂为多个无法连通的区域时,就发出红色警报。注意:若该国本来就不完全连通,是分裂的k个区域,而失去一个城市并不改变其他城市之间的连通性,则不要发出警报。 输入格式: 输入在第一行给出两个整数N(0 < N ≤ 500)和M(≤ 5000),分别为城市个数(于是默认城市从0到N-1编号)和连接两城市的通路条数。随后M行,每行给出一条通路所连接的两个城市的编号,其间以1个空格分隔

索辣鲲。 215

红色警报(天梯赛,PTA)

7-9 红色警报(25 分) 战争中保持各个城市间的连通性非常重要。本题要求你编写一个报警程序,当失去一个城市导致国家被分裂为多个无法连通的区域时,就发出红色警报。注意:若该国本来就不完全连通,是分裂的k个区域,而失去一个城市并不改变其他城市之间的连通性,则不要发出警报。 输入格式: 输入在第一行给出两个整数N(0 N ≤ 500)和M(≤ 5000

saber_wtq的博客 4641

天梯赛-L2-1 红色警报 (25 分)

血的教训!! 格式输出一定要直接复制样例!! 红色警报后面竟然是’!’ 不是 ‘.’ 查了好久好久都没看出来 一度怀疑人生 题目很好理解 思路就是 每次攻占一个城市 就把城市相连的标记去掉 然后计算连通分量 如果连通分量增加2及以上,则说明是红色警报 #include <bits/stdc++.h> using namespace std; typedef long long ll; int m, n; int mp[501][501] = {0}; int vis[501] = {0};

sjyisdog的博客 227
上一篇: POJ3320尺取法
下一篇: POJ3468A Simple Problem with Integers(线段树)
Link_Ray
博客等级 码龄9年 44粉丝 156原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值