对于关系,看其是否是“等价关系”,即满足:自反,传递,对称。

如果是可以用并查集来连接等价类。

这道题是求原图补集的联通快个数,考虑原图度最少的点(由鸽巢原理,最多为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的更多相关文章

  1. [BZOJ 1098] [POI2007] 办公楼biu 【链表优化BFS】

    题目链接:BZOJ - 1098 题目分析 只有两个点之间有边的时候它们才能在不同的楼内,那么就是说如果两个点之间没有边它们就一定在同一座楼内. 那么要求的就是求原图的补图的连通块. 然而原图的补图的 ...

  2. BZOJ 1098 [POI2007]办公楼biu(反向图bfs+并查集优化)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1098 [题目大意] 现在有一张图,要求将这张图的点划分为尽量多的分组,对于不同分组的两 ...

  3. bzoj 1098 [POI2007]办公楼biu——链表

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1098 求补图的连通块大小.与自己没有边的和自己在一个连通块里. 用链表把所有点串起来.先给自 ...

  4. bzoj 1098 办公楼biu —— 链表+栈

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1098 首先,没有连边的人一定得在一个连通块里: 先把所有人连成一个链表,然后从第一个人开始, ...

  5. bzoj 1098 poi2007 办公楼 bfs+链表

    题意很好理解,求给出图反图的联通块个数. 考虑这样一个事情:一个联通块里的点,最多只会被遍历一次,再遍历时没有任何意义 所以用链表来存,每遍历到一个点就将该点删掉 #include<cstdio ...

  6. 【刷题】BZOJ 1098 [POI2007]办公楼biu

    Description FGD开办了一家电话公司.他雇用了N个职员,给了每个职员一部手机.每个职员的手机里都存储有一些同事的 电话号码.由于FGD的公司规模不断扩大,旧的办公楼已经显得十分狭窄,FGD ...

  7. 【BZOJ 1098】办公楼(补图连通块个数,Bfs)

    补图连通块个数这大概是一个套路吧,我之前没有见到过,想了好久都没有想出来QaQ 事实上这个做法本身就是一个朴素算法,但进行巧妙的实现,就可以分析出它的上界不会超过 $O(n + m)$. 接下来介绍一 ...

  8. bzoj 1098 [POI2007]办公楼biu bfs+补图+双向链表

    [POI2007]办公楼biu Time Limit: 20 Sec  Memory Limit: 162 MBSubmit: 1543  Solved: 743[Submit][Status][Di ...

  9. BZOJ 1098: [POI2007]办公楼biu 链表

    求补图连通块,用链表优化,势能O(n+m) #include<cstdio> #include<cstring> #include<iostream> #inclu ...

随机推荐

  1. NB二人组(一)----堆排序

    堆排序前传--树与二叉树简介 特殊且常用的树--二叉树  两种特殊的二叉树 二叉树的存储方式 二叉树小结 堆排序 堆这个玩意....... 堆排序过程: 构造堆: 堆排序的算法程序(程序需配合着下图理 ...

  2. Python ctypes中cast/py_object用法

    class ctypes.py_object Represents the C PyObject * datatype. Calling this without an argument create ...

  3. idea docker 连接 linux 上的 docker

    安装插件 Docker插件,首先需要在你的IDEA中安装Docker插件,定位到File-Setting-Plugins后搜索Docker Integration安装 配置Docker服务器,在IDE ...

  4. Appium环境搭建说明(包括报错处理)

    Appium环境搭建说明 一.环境配置 前提是windows系统已安装以下软件: 1.jdk 我装的是1.8.0 2.android-sdk 3.python,3.4-3.6 5.Node.js,v8 ...

  5. 最小的Django应用

    创建一个hello.py   内容如下: import sys from django.conf import settings # 设置 settings.configure( DEBUG = Tr ...

  6. HBase原理解析(转)

    本文属于转载,原文链接:http://www.aboutyun.com/thread-7199-1-1.html   前提是大家至少了解HBase的基本需求和组件. 从大家最熟悉的客户端发起请求开始讲 ...

  7. Photon3Unity3D.dll 解析一

    IPhotonPeerListener  Photon客户端回调接口 1: //只要有来自Photon Server的事件就触发 2: public virtual void OnEvent( Eve ...

  8. java并发编程实战笔记---(第三章)对象的共享

    3.1 可见性 synchronized 不仅实现了原子性操作或者确定了临界区,而且确保内存可见性. *****必须在同步中才能保证:当一个线程修改了对象状态之后,另一个线程可以看到发生的状态变化. ...

  9. csu 1592(区间DP)

    1592: 石子归并 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 356  Solved: 148[Submit][Status][Web Board ...

  10. Yii 简明学习教程

    Yii是一个基于组件的高性能PHP框架,用于快速开发Web应用程序(下面内容基于Yii 1.1) 1. 典型的工作流 用户向入口脚本index.php发起请求 入口脚本加载应用配置config.php ...