CCCC L2-013. 红色警报 连通分量
题解:将问题转化成连通分量。每次失去一座城市,切断其所有的边,算一次现在的连通分量。若增量大于1,则发出警报。
至于如何算连通分量,直接用tarjan模板
坑://我昨天晚上半夜敲的模板,把一个算所有环中最短环的tarjan模板 直接贴上去了,一直不过,还XJB改了会儿233(现在90行的代码逛逛B站随便改改就ac了2333)
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<vector>
#include<queue>
#include<map>
#include<cmath>
#include<stack>
#include<string.h>
#include<set>
using namespace std;
const int maxn = + ;
vector<int> E[maxn];
int dfn[maxn], low[maxn], tot, n, ans =, vis[maxn];
stack<int> S;
void init() {
for (int i = ; i < maxn; i++) vis[i] = dfn[i] = low[i] = ;
tot = ;
ans = ;
}
void tarjan(int x) {
low[x] = dfn[x] = ++tot;
S.push(x); vis[x] = ;
for (int i = ; i < E[x].size(); i++) {
int v = E[x][i];
if (!dfn[v]) {
tarjan(v);
low[x] = min(low[x], low[v]); }
else if (vis[x]) {
low[x] = min(low[x], dfn[v]);
}
}
if (low[x] == dfn[x]) {
//int cnt = 0;
while () {
int now = S.top();
S.pop();
vis[x] = ;
//cnt++;
if (now == x)break;
}
ans++;
//if (cnt > 1)ans = min(ans, cnt);
}
}
set<int> st[maxn];
int main() {
int m;
cin >> n >> m;
for (int i = ; i < n; i++)E[i].push_back(i);
for (int i = ; i <= m; i++) {
int x, y;
scanf("%d%d", &x, &y);//判重??没用
if (st[x].count(y) == ) { E[x].push_back(y); st[x].insert(y); }
if (st[y].count(x) == ) { E[y].push_back(x); st[y].insert(x); }
//E[y].push_back(x);
}
//n500m5000
for (int i = ; i <= n; i++) {
if (!dfn[i])tarjan(i);
}
int last = ans;
int q; cin >> q; for (int j = ; j <= q; j++) {
int x; cin >> x;
int ok = ;
for (int i = ; i < E[x].size(); i++) {
int v = E[x][i];
// for (auto t : E[v]) if (t == x)t = -1;//强行去除反向边。
for (vector<int>::iterator it = E[v].begin(); it != E[v].end(); it++)if (*it == x) { E[v].erase(it); break; }
} E[x].clear();
E[x].push_back(x);
init();
//cout << last<< endl;
for (int i = ; i <= n; i++) {
if (!dfn[i])tarjan(i);
}
if (ans > last + ) ok = ;
last = ans;
if (ok)printf("Red Alert: City %d is lost!\n", x);
else printf("City %d is lost.\n", x);
}
//cout << ans << endl;
if (q == n)cout << "Game Over.";
system("pause");
}
CCCC L2-013. 红色警报 连通分量的更多相关文章
- CCCC 红色警报
题意: 战争中保持各个城市间的连通性非常重要.本题要求你编写一个报警程序,当失去一个城市导致国家被分裂为多个无法连通的区域时,就发出红色警报.注意:若该国本来就不完全连通,是分裂的k个区域,而失去一个 ...
- PAT天梯赛练习题 L2-013 红色警报(并查集+逆序加边)
L2-013. 红色警报 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 战争中保持各个城市间的连通性非常重要.本题要求你编写一 ...
- 天梯赛决赛 L2-1.红色警报 并查集
L2-013. 红色警报 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 战争中保持各个城市间的连通性非常重要.本题要求你编写一 ...
- L2-013 红色警报 (25 分) (并查集)
链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805063963230208 题目: 战争中保持各个城市间的连通性非 ...
- L2-013 红色警报 (25 分)
L2-013 红色警报 (25 分) 战争中保持各个城市间的连通性非常重要.本题要求你编写一个报警程序,当失去一个城市导致国家被分裂为多个无法连通的区域时,就发出红色警报.注意:若该国本来就不完全 ...
- PAT L2-013 红色警报
https://pintia.cn/problem-sets/994805046380707840/problems/994805063963230208 战争中保持各个城市间的连通性非常重要.本题要 ...
- L2-013. 红色警报(并查集)*
L2-013. 红色警报 参考博客 #include <cstdio> #include <algorithm> #include <iostream> #incl ...
- Struts2漏洞拉响网站安全红色警报以及把Struts2更新为最新版本Struts2.3.15.1步骤
360网站安全检测平台今日发布红色警报称,广泛应用在国内大型网站系统的Struts2框架正在遭到黑客猛烈攻击.利用Struts2“命令执行漏洞”,黑客可轻易获得网站服务器ROOT权限.执行任意命令,从 ...
- PAT L2-013 红色警报(并查集求连通子图)
战争中保持各个城市间的连通性非常重要.本题要求你编写一个报警程序,当失去一个城市导致国家被分裂为多个无法连通的区域时,就发出红色警报.注意:若该国本来就不完全连通,是分裂的k个区域,而失去一个城市并不 ...
随机推荐
- 【RF库Collections测试】Log Dictionary 【同log list】
Name:Log DictionarySource:Collections <test library>Arguments:[ dictionary | level=INFO ]Logs ...
- mysql官方下载
https://dev.mysql.com/downloads/file/?id=472899
- 二叉查找树(BST)的性质
二叉查找树的性质: 1.左子树上所有结点的值均小于或等于它的根结点的值. 2.右子树上所有结点的值均大于或等于它的根结点的值. 3.左.右子树也分别为二叉排序树. 下图中这棵树,就是一颗典型的二叉查找 ...
- 【LeetCode OJ】Search Insert Position
题目:Given a sorted array and a target value, return the index if the target is found. If not, return ...
- JS缺失错误- Uncaught SyntaxError: Unexpected token <
这种情况,表明,缺少js文件 解决方式:在文件夹下将缺少js文件补足
- Win8应用开发 入门篇(三) UX交互导航模式
导航模式(Windows 应用商店应用) 在本文中 分层模式 画布上导航 顶部应用栏 语义式缩放 相关主题 组织 Windows 应用商店应用中的内容,以便用户可以轻松而直观地进行导航.使用正确的 ...
- 【Nginx】服务器中HTTP 301跳转到带www的域名的方法
从nginx的官方文档 documentation, 正确的nginx https 301跳转到带www域名方法的方法如下: HTTP 301跳转到带www域名方法 需要两个server段. serv ...
- 【大数据系列】MapReduce详解
MapReduce是hadoop中的一个计算框架,用来处理大数据.所谓大数据处理,即以价值为导向,对大数据加工,挖掘和优化等各种处理. MapReduce擅长处理大数据,这是由MapReduce的设计 ...
- android开发-c++代码调用so库
Android项目的CMakeLists.txt代码如下,so文件放在项目的$Project/app/src/main/jniLibs/$arch下,$arch替换为arm64-v8a armv7a等 ...
- sencha touch carousel 扩展 CardList 可绑定data/store
扩展代码: /* *扩展carousel *通过data,tpl,store配置数据 */ Ext.define('ux.CardList', { extend: 'Ext.carousel.Caro ...