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

📅 2026/6/16 2:32:45
天梯赛团体设计L2-013 红色警报
这题是个dfs,完全没有想到,我脑子里闪过离散数学的着色问题,然后止步于此,不过没关系,还有ai不得不说,这个好简洁啊!!好的,这题对我来说收获还挺多的,边界错误已经说不完了,对小知识点上,我觉得我知道了bool只能全部初始化为false,true是不行的,第一遍带着代码敲问题依旧很多,在不少地方漏了这个变量,写错了那个变量,只能说我的问题还是很大的比起以前遇到的的dfs题目,这次的算简单,count用来计算当前状态的有几个完全独立的dfs则是负责将所有有关系的找出来现在的我连算法都判断不出来,,,,,这次做题过程主要是,看题目,不会,感觉像着色问题,但是不是很会下手,总共也就是看了个题目,然后ai看到ai思考过程中有并查集,发现确实好像,最后还是看的dfs,然后开始想看代码理解,,,,好困,,,,,,,,,(~_~)就开始将变量打出来,在前面输入输出打出来,然后看count函数,发现懂了,dfs也就更容易理解了,但是虽然是看ai但没有照抄,出来了一大堆问题,总的来说解决完发现,整体过了4,5遍才过,觉得再打一遍,不看参考,然后就好啦!!!#include iostream #include bits/stdc.h using namespace std; int n, m, k; int vis[505] {false}; int capture[505] {false}; vector intg[505]; void dfs(int i) { vis[i] true; for (int v : g[i]) { if (!vis[v] true !capture[v] true) { dfs(v); } } } int count() { for (int i 0; i n; i) { vis[i] false; } int cnt 0; for (int i 0; i n; i) { if (!capture[i] true !vis[i] true) { cnt; dfs(i); } } return cnt; } int main() { cin n m; for (int i 0; i m; i) { int x, y; cin x y; g[x].push_back(y); g[y].push_back(x); } cin k; vectorintattack; for (int i 0; i k; i) { int c; cin c; attack.push_back(c); } int c count(); for (int i : attack) { capture[i] true; int cc count(); if (cc c) { printf(Red Alert: City %d is lost!, i); } else { printf(City %d is lost., i); } c cc; cout endl; if (cc 0) { cout Game Over.; } } }