当前位置: 首页 > news >正文

打卡信奥刷题(3220)用C++实现信奥题 P8287 「DAOI R1」Flame

P8287 「DAOI R1」Flame

题目背景

尝尝天堂里的苹果有什么了不起,我要尝尝地狱里的苹果。

题目描述

黑暗里有黑色的火焰,只有目光敏锐的人才可以捕捉到,

借着这点卑微之光,走进地狱深处…

欢迎来到地狱的审判之地。

$ \texttt{hhpq.} $ 将 D 押入了地狱的审判之地,D 必须在业火之城成功生成一座业火监狱之前逃离,所以他想知道还有多少秒时间。

在这座业火之城中,共有nnn个祭坛,共有mmm条可以蔓延火苗的业火之路,且业火之路是双向连通。

已知在这一座业火之城共有kkk个火种已被点燃的业火祭坛,且从第一秒开始,火种将开始从被点燃的业火祭坛向可以蔓延且未被点燃的业火祭坛蔓延。

当祭坛被点燃后,则会瞬间激活,和与之有路的祭坛连接业火圣壁。

当存在一片由业火圣壁构成的封闭图形时,则业火监狱生成成功。

简化题意

给出一个nnn个点,mmm条边的无向图,每一个点有一个标记,初始有kkk个点的标记为1(将给出这kkk个点的编号),其余的点标记为0

每一秒,对于每个标记为1的点,与它有边相连的点的标记都会变成1

求最少需要多少秒,图中标记为1的点与其相邻的边可以构成一个简单环。

换言之,求最少多少秒后存在一个由1构成的集合形成简单环。

输入格式

第一行三个正整数:n,m,kn,m,kn,m,k

下面mmm行,每行两个正整数:x,yx,yx,y(第xxx座业火祭坛与第yyy座业火祭坛有业火之路连接);

最后一行kkk个正整数:已被点燃(拥有火种)的祭坛编号。

输出格式

若可以逃离,输出 D 还有多少时间。

反之若无法生成业火监狱,输出Poor D!

输入输出样例 #1

输入 #1

3 3 1 1 2 2 3 3 1 1

输出 #1

1

输入输出样例 #2

输入 #2

5 4 2 1 2 2 3 3 4 2 5 1 5

输出 #2

Poor D!

输入输出样例 #3

输入 #3

15 15 2 2 1 2 3 2 9 5 9 4 5 5 7 6 7 7 8 7 11 11 10 10 9 10 14 14 15 11 12 12 13 4 15

输出 #3

3

说明/提示

样例解释

样例1解释

当时间到第一秒时,祭坛111的火焰将蔓延到祭坛222333,此时已经构成一个封闭图形了,故答案为111

样例2解释

可以证明到此时是无法产生简单环的。

数据规模

Subtaskn≤n\leqnm≤m\leqmk≤k\leqk分值
00010610^6106n−1n-1n110410^4104555
11110610^61062×1062\times10^62×106111101010
222101010454545111555
333200200200500500500101010101010
4442×1032\times 10^32×1035×1035\times 10^35×103505050101010
5555×1055\times10^55×1056×1056\times10^56×105500500500303030
66610610^61062×1062\times10^62×10610410^4104303030

保证与约定

保证数据无重边和自环;

保证数据给定的图是一张无向连通图。

帮助

输入量较大,建议使用较为快速的读入方式。

C++实现

#include<iostream>#include<vector>#include<queue>usingnamespacestd;constintMax=1000005;intn,m,k,ans=Max,f[Max],dis[Max];vector<int>g[Max];queue<pair<int,int>>q;boolvis[Max];intfather(intx){// 并查集if(f[x]==x)returnx;returnf[x]=father(f[x]);}intmain(){ios::sync_with_stdio(false);cin>>n>>m>>k;if(m==n-1){// 判定无解cout<<"Poor D!"<<endl;return0;}for(inti=1;i<=n;i++)// 并查集初始化f[i]=i;for(inti=1,x,y;i<=m;i++){cin>>x>>y;g[x].push_back(y);g[y].push_back(x);}for(inti=1,x;i<=k;i++){cin>>x;q.push(make_pair(x,0));// 搜索由 k 个源点同时开始dis[x]=1;}while(!q.empty()){intx=q.front().first;// 当前节点intfa=q.front().second;// 父节点q.pop();if(vis[x])continue;vis[x]=true;for(autoy:g[x])if(y!=fa){// 跳过父节点if(!dis[y]){dis[y]=dis[x]+1;q.push(make_pair(y,x));f[father(y)]=father(x);}elseif(!(dis[y]+1==dis[x]||(vis[y]&&dis[y]==dis[x]))){if(father(y)==father(x))// 已经同属一个集合 统计答案ans=min(max(dis[y],dis[x])-1,ans);elsef[father(y)]=father(x);}}}cout<<ans<<endl;return0;}

后续

接下来我会不断用C++来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容

http://www.jsqmd.com/news/767404/

相关文章:

  • MCP 2026租户隔离配置正在失效?——2025年12月补丁强制升级倒计时72小时,附迁移检查清单
  • 告别标准库:用STM32CubeMX+HAL库玩转蓝桥杯CT117E开发板的5个实战项目
  • 论文AI率达标线是多少?实测5款降AIGC工具一键消AI痕迹
  • 深入ARM GIC与Xilinx SDK封装:手把手拆解Zynq中断控制器驱动层设计
  • 怎样高效制作电子书:WebToEpub网页转换的实用教程
  • C语言链表完全指南:从单节点到链表管理
  • JAVA商城小程序APP公众号源码-单商户PC源码多商户源码社交电商源码的代码片段
  • 告别VSCode插件!在Ubuntu 20.04上用纯命令行搞定ESP32-CAM摄像头服务器
  • 华恒智信助力高速成长型科技行业完成敏捷任职资格体系重塑
  • 黑马程序员 | 2026 AI学习全攻略:不同人群的最优路径与高薪就业机会
  • 构建生产级AI智能体的六层设计模式与工程实践
  • zteOnu权限解锁工具:中兴光猫工厂模式终极指南
  • 深入解析XML与XPath的结合
  • 2026 餐饮行业曝光引流指南:成本时效解析与五大服务商参考
  • 娱乐圈天降紫微星跳出世俗,海棠山铁哥不玩圈内资源游戏
  • 【车载 AOSP 16 蓝牙(bluedroid)服务】【qcom 平台双蓝牙】【4.btsnoop创建和捕获流程分析】
  • 光通信PON和WIFI无线通信技术对比
  • 家装壁炉选型避坑指南:真火、电壁炉、雾化壁炉怎么选?纽波特铸铁壁炉实测分享
  • 从Figma设计稿自动生成CSS代码:design-extract工具实战指南
  • 3D法线贴图生成终极指南:NormalMap-Online在线工具深度解析
  • 北京食材配送的专业服务商
  • RAG检索系统构建指南:从混合检索到生产部署的工程实践
  • 安卓手机控制机械爪:软硬件融合开发实践与避坑指南
  • 机械机电专利服务不止于“申请”——构建高效响应・全链服务・全球支撑的保护体系
  • 飞书技能开发框架:模块化构建智能机器人应用
  • 智能体技能开发实战:基于LLM的咖啡制作Agent设计与实现
  • 2026年加盟防腐工程资质公司推荐top榜单,加盟钢构工程资质/加盟防护工程资质/加盟工程施工资质/加盟风力发电工程资质/加盟防水防腐工程三级资质 - 品牌策略师
  • SpringBoot项目实战:用Aspose-Words 15.8.0和poi-tl优雅生成带复杂格式的PDF报告
  • 告别网盘限速烦恼:LinkSwift直链下载助手完整指南
  • Python 爬虫反爬突破:单接口多版本兼容抓取策略