Codeforces 190E - Counter Attack
【题意】给一个无向图的反图(即给定的边实际上不存在,而未给的边是存在的),求连通块数。(点数n<=5*10^5,边数m<=10^6)
一开始我想的用DFS,枚举每一个点,跳过不存在的点,直接扫描,时间复杂度是O(n^2)的。然后,这种方案就被抛弃了。
我们可以设一个集合st,一开始st中包含所有点,每扫描到一个连通块,就把这个连通块从st中删掉。
那么怎么求连通块,可以使用BFS+二分查找。使用邻接表存储图,vector <int> G[i]为结点i相邻的结点,预处理时将其排序为有序序列。然后BFS,直接枚举st中的元素(即不存在已扫描到的连通块中的点),然后对该元素在G[i]中二分查找,如果没有找到,证明存在着这一条边,进行扩展即可。
时间复杂度:最坏情况下,所有点都没有边相连,二分查找O(logn),
【TIP】
- 使用st代替了bool vis[i],避免重复无用的扫描。
- 其次是stl二分查找的使用 binary_search(st.begin(),st.end(),elem):判断st中是否存在elem

- 然后是图上这个地方,先erase(),再it++,程序会报错,然而先it++,再erase(),就能AC。。。我觉得应该是erase(v)操作,就是把v这个节点删除了,it之前是指向这个节点的,既然节点删除了,那么it就会指向一个很奇怪的地方,反正it++不一定再属于st。
#include<bits/stdc++.h>
#define eps 1e-9
#define FOR(i,j,k) for(int i=j;i<=k;i++)
#define MAXN 500005
#define MAXM 1000005
#define INF 0x3fffffff
using namespace std;
typedef long long LL;
int i,j,k,n,m,x,y,T,ans,big,cas,num,len;
bool flag; vector <int> G[MAXN],out[MAXN];
set <int> st; void bfs(int u)
{
queue <int> q;
q.push(u); while (!q.empty())
{
u=q.front();
q.pop(); out[ans].push_back(u); for (set <int> ::iterator it=st.begin();it!=st.end();)
{
int v=*it;
it++;
if (!binary_search(G[u].begin(),G[u].end(),v))
{
q.push(v);
st.erase(v);
}
}
}
} int main()
{
scanf("%d%d",&n,&m); for (i=;i<=m;i++)
{
scanf("%d %d",&x,&y);
G[x].push_back(y);
G[y].push_back(x);
} for (i=;i<=n;i++)
{
st.insert(i);
sort(G[i].begin(),G[i].end());
} ans=;
while (!st.empty())
{
int u=*(st.begin());
st.erase(u);
ans++;
bfs(u);
} printf("%d\n",ans);
for (i=;i<=ans;i++)
{
int size=out[i].size();
printf("%d ",size);
for (j=;j<size-;j++)
{
printf("%d ",out[i][j]);
}
printf("%d\n",out[i][size-]);
} return ;
}
Codeforces 190E - Counter Attack的更多相关文章
- Codeforces Round #120 (Div. 2)
A. Vasya and the Bus 根据\(n,m\)是否为0分类讨论下. B. Surrounded 判断两圆是否有交点,否则构造的圆与两圆相切. C. STL 看代码比较清楚. void t ...
- XSS CSS Cross SiteScript 跨站脚本攻击
XSS攻击及防御 - 高爽|Coder - CSDN博客 https://blog.csdn.net/ghsau/article/details/17027893 XSS又称CSS,全称Cross S ...
- codeforces 495A. Digital Counter 解题报告
题目链接:http://codeforces.com/problemset/problem/495/A 这个题目意思好绕好绕~~好绕~~~~~,昨天早上做得 virtual 看不懂,晚上继续看还是,差 ...
- Codeforces Round #115 A. Robot Bicorn Attack 暴力
A. Robot Bicorn Attack Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/17 ...
- Codeforces Round #364 (Div. 2) B. Cells Not Under Attack
B. Cells Not Under Attack time limit per test 2 seconds memory limit per test 256 megabytes input st ...
- CodeForces 701B Cells Not Under Attack
题目链接:http://codeforces.com/problemset/problem/701/B 题目大意: 输入一个数n,m, 生成n*n的矩阵,用户输入m个点的位置,该点会影响该行和该列,每 ...
- Codeforces Round #364 (Div. 2) Cells Not Under Attack
Cells Not Under Attack 题意: 给出n*n的地图,有给你m个坐标,是棋子,一个棋子可以把一行一列都攻击到,在根据下面的图,就可以看出让你求阴影(即没有被攻击)的方块个数 题解: ...
- codeforces #364b Cells Not Under Attack
比赛的时候 long long sum=n*n,计算不出1e10长度到数,没有搞掉. 哎,以后要注意这个地方.这个题其实不难: 统计能被攻击到的个数,然后用总的个数减掉就可以了.注意有些地方重复计算, ...
- codeforces 701B B. Cells Not Under Attack(水题)
题目链接: B. Cells Not Under Attack 题意: n*n的棋盘,现在放m个棋子,放一个棋子这一行和这一列就不会under attack了,每次放棋子回答有多少点还可能under ...
随机推荐
- 设置session的生命周期(php)
PHP中,Session变量保存在服务器端(默认以文件格式保存),而Session ID以cookie形式保存在客户端. 销毁session的方法有2种 第一种是通过程序 session_destor ...
- 关于HTML编辑页面(1)
1,<title>...</title> //省略号表示的是网页标题 2,<body>...</body>//省略号表示的是网页正文内容 3,在Drea ...
- [Fw]人和人之间在八小时之外的差别
原文地址:http://hankjin.blog.163.com/blog/static/3373193720083249387801/ 业余八小时人的活动千姿百态.八小时以外你在干什么,恰恰决定着你 ...
- BZOJ 1057 棋盘制作
Description 国际象棋是世界上最古老的博弈游戏之一,和中国的围棋.象棋以及日本的将棋同享盛名.据说国际象棋起源于易经的思想,棋盘是一个8*8大小的黑白相间的方阵,对应八八六十四卦,黑白对应阴 ...
- Tunnel Warfare
hdu1540:http://acm.hdu.edu.cn/showproblem.php?pid=1540 题意:给你一列村庄,每个村庄给一个标号,1--n,然后毁掉一些村庄,或者重建几个村庄,重建 ...
- Dungeon Master(poj 2251)
Description You are trapped in a 3D dungeon and need to find the quickest way out! The dungeon is co ...
- 非主窗体在任务栏显示按钮(简单好用)good
非主窗体在任务栏显示按钮 type TForm2 = class(TForm) private { Private declarations } public { Public declaration ...
- Lua开发环境配置
Lua(英语发音:/ˈluːə/)程序设计语言是一个简洁.轻量.可扩展的脚本语言,是葡萄牙语中“Luna”(月亮)的意思. Lua is a powerful, fast, lightweight, ...
- WallsEveryDay 必应桌面壁纸
软件名:WallsEveryday 陈述: 无聊时写着玩的一个桌面壁纸的软件,壁纸是自动从必应下载,所以每天都会有新的. 在ubuntu上测试通过,windows上找了台win7测试通过,其他没测试. ...
- QTP自传之测试报告
前言 测试报告是测试阶段的最后产出,也是最重要的产出,自动化测试报告也是如此.前期所做的工作,添加对象.编写脚本等都是为了可以生成一份正确.严谨的测试报告.我作为一款功能全面的自动化测试工具,毫无疑问 ...