题目五太磨叽了图片某

战争中保持各个城市间的连通性非常重要本题要求你编写一个报警程序,当失去一个城市导致国家被分裂为多个无法连通的区域时就发出红色警报。注意:若该国本來就不完全连通是分裂的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计算出一个图内的连通分量个数count当城市被攻占后,再统计连通分量的个数temp被攻占的城市会变成了一个单独的城市,因此会多出来一个连通分量只要temp <= count + 1就说明没有改变图的连通性。每一个城市被攻占后都要把count的值更新为temp以保证下一次的判断是建立在已经失去之前这么多城市的基础上的。因为题目中说输入保证给出的被攻占的城市编号都是合法的且无重复所以如果城市失去了n个,就是当前输入的是从0开始嘚第n-1个数据的时候就说明Game Over了。
 
 //被攻占的城市会变成一个单独的城市连通分量会加一
 else //若图的连通性发生了改变
 

我要回帖

更多关于 太磨叽 的文章

 

随机推荐