bzoj 1098
对于关系,看其是否是“等价关系”,即满足:自反,传递,对称。
如果是可以用并查集来连接等价类。
这道题是求原图补集的联通快个数,考虑原图度最少的点(由鸽巢原理,最多为2*e/n个)。
先将未与其连边的点并在一个集合中,然后再用剩下的点暴力,每次O(n),最多暴力O(2*e/n)次,所以总的复杂度是O(e)的。
/**************************************************************
Problem: 1098
User: idy002
Language: C++
Result: Accepted
Time:8932 ms
Memory:31140 kb
****************************************************************/ #include <cstdio>
#include <cstring>
#include <vector>
#include <algorithm>
#define maxn 100010
using namespace std; int n, m;
int dgr[maxn];
vector<int> g[maxn], stk;
int fa[maxn], sz[maxn];
bool mark[maxn]; void init() {
for( int i=; i<=n; i++ ) fa[i]=i;
}
int find( int a ) {
return a==fa[a] ? a : fa[a]=find(fa[a]);
}
void unon( int a, int b ) {
fa[find(a)] = find(b);
} int main() {
scanf( "%d%d", &n, &m );
for( int i=,u,v; i<=m; i++ ) {
scanf( "%d%d", &u, &v );
g[u].push_back( v );
g[v].push_back( u );
dgr[u]++, dgr[v]++;
}
int mu=;
init();
for( int u=; u<=n; u++ ) if( dgr[u]<dgr[mu] ) mu=u; for( int t=; t<g[mu].size(); t++ ) mark[g[mu][t]]=true;
for( int u=; u<=n; u++ ) if( !mark[u] ) unon(u,mu);
for( int t=; t<g[mu].size(); t++ ) mark[g[mu][t]]=false; for( int t=; t<g[mu].size(); t++ ) stk.push_back( g[mu][t] );
for( int i=; i<stk.size(); i++ ) {
int u=stk[i]; for( int t=; t<g[u].size(); t++ ) mark[g[u][t]] = true;
for( int v=; v<=n; v++ ) if( !mark[v] ) unon(u,v);
for( int t=; t<g[u].size(); t++ ) mark[g[u][t]] = false;
}
for( int u=; u<=n; u++ )
sz[find(u)]++;
vector<int> ans;
for( int u=; u<=n; u++ )
if( fa[u]==u ) ans.push_back(sz[u]);
sort( ans.begin(), ans.end() );
printf( "%d\n", ans.size() );
for( int t=; t<ans.size(); t++ )
printf( "%d ", ans[t] );
printf( "\n" );
}
bzoj 1098的更多相关文章
- [BZOJ 1098] [POI2007] 办公楼biu 【链表优化BFS】
题目链接:BZOJ - 1098 题目分析 只有两个点之间有边的时候它们才能在不同的楼内,那么就是说如果两个点之间没有边它们就一定在同一座楼内. 那么要求的就是求原图的补图的连通块. 然而原图的补图的 ...
- BZOJ 1098 [POI2007]办公楼biu(反向图bfs+并查集优化)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1098 [题目大意] 现在有一张图,要求将这张图的点划分为尽量多的分组,对于不同分组的两 ...
- bzoj 1098 [POI2007]办公楼biu——链表
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1098 求补图的连通块大小.与自己没有边的和自己在一个连通块里. 用链表把所有点串起来.先给自 ...
- bzoj 1098 办公楼biu —— 链表+栈
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1098 首先,没有连边的人一定得在一个连通块里: 先把所有人连成一个链表,然后从第一个人开始, ...
- bzoj 1098 poi2007 办公楼 bfs+链表
题意很好理解,求给出图反图的联通块个数. 考虑这样一个事情:一个联通块里的点,最多只会被遍历一次,再遍历时没有任何意义 所以用链表来存,每遍历到一个点就将该点删掉 #include<cstdio ...
- 【刷题】BZOJ 1098 [POI2007]办公楼biu
Description FGD开办了一家电话公司.他雇用了N个职员,给了每个职员一部手机.每个职员的手机里都存储有一些同事的 电话号码.由于FGD的公司规模不断扩大,旧的办公楼已经显得十分狭窄,FGD ...
- 【BZOJ 1098】办公楼(补图连通块个数,Bfs)
补图连通块个数这大概是一个套路吧,我之前没有见到过,想了好久都没有想出来QaQ 事实上这个做法本身就是一个朴素算法,但进行巧妙的实现,就可以分析出它的上界不会超过 $O(n + m)$. 接下来介绍一 ...
- bzoj 1098 [POI2007]办公楼biu bfs+补图+双向链表
[POI2007]办公楼biu Time Limit: 20 Sec Memory Limit: 162 MBSubmit: 1543 Solved: 743[Submit][Status][Di ...
- BZOJ 1098: [POI2007]办公楼biu 链表
求补图连通块,用链表优化,势能O(n+m) #include<cstdio> #include<cstring> #include<iostream> #inclu ...
随机推荐
- JS window.name跨域封装
JS window.name 跨域封装 function CrossDomainName(target, agent, callback, security) { if (typeof target ...
- 利用PCA可视化异常点
异常点往往是由于某一个特征或者多个特征数值异常.但是对于多维度特征无法直接进行可视化观测异常点,利用PCA技术进行维度缩减,可以在二维或者三维空间上进行可视化展示. 原数据如下: from sklea ...
- SQL server(到主机的TCPIPl连接失败的问题)
1 首先要做的是在sql新建查询里输入 exec sys.sp_readerrorlog 0, 1, 'listening' 运行后 会显示你的sql 正在运行的tcp/ip接口 看看是否和你java ...
- nginx证书制作以及配置https并设置访问http自动跳转https(反向代理转发jboss)
nginx证书制作以及配置https并设置访问http自动跳转https 默认情况下ssl模块并未被安装,如果要使用该模块则需要在编译时指定–with-http_ssl_module参数,安装模块依赖 ...
- URAL题解一
URAL题解一 URAL 1002 题目描述:一种记住手机号的方法就是将字母与数字对应,如图.这样就可以只记住一些单词,而不用记住数字.给出一个数字串和n个单词,用最少的单词数来代替数字串,输出对应的 ...
- .pnts点云
一种3d tiles格式 MIME格式: <configuration> <system.webServer> <staticContent> <remove ...
- hdu 1849(巴什博弈)
Rabbit and Grass Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- git rebase 过程中遇到冲突该怎么解决?
在执行git rebase 过程中经常遇到问题,此时有点慌,一般如何解决呢? 1.先将本地的冲突手动解决 2.执行下面命令 git add . git rebase --contine //继续re ...
- IEEEXtreme 10.0 - Counting Molecules
这是 meelo 原创的 IEEEXtreme极限编程大赛题解 Xtreme 10.0 - Counting Molecules 题目来源 第10届IEEE极限编程大赛 https://www.hac ...
- 第 17 章 使用API
在本章中,我们将学习如何编写一个独立的程序,并对其获取的数据进行可视化.这个程序将使用Web应用编程接口(API)自动请求网站的特定信息而不是整个网页,再对这些信息进行可视化.由于这样编写的程序始终使 ...