bzoj 1098 poi2007 办公楼 bfs+链表
题意很好理解,求给出图反图的联通块个数。
考虑这样一个事情:一个联通块里的点,最多只会被遍历一次,再遍历时没有任何意义
所以用链表来存,每遍历到一个点就将该点删掉
- #include<cstdio>
- #include<cstring>
- #include<iostream>
- #include<vector>
- #include<algorithm>
- using namespace std;
- #define N 100005
- int e=1,head[N],n,m;
- int nxt[N],ans,pre[N],final[N],tot,q[N];
- bool bo[N],flag[N];
- struct edge{
- int u,v,next;
- }ed[4000005];
- void add(int u,int v)
- {
- ed[e].v=v;
- ed[e].next=head[u];
- head[u]=e++;
- }
- void del(int x){
- nxt[pre[x]]=nxt[x];
- pre[nxt[x]]=pre[x];
- }
- void bfs(int x)
- {
- int h=1,t=1;
- q[1]=x;
- while(h<=t){
- int now=q[h++]; ans++;
- for(int i=nxt[0];i<=n;i=nxt[i]) bo[i]=0;
- for(int i=head[now];i;i=ed[i].next)
- bo[ed[i].v]=1;
- for(int i=nxt[0];i<=n;i=nxt[i]){
- if(!bo[i]){
- del(i); q[++t]=i;
- }
- }
- }
- }
- int main()
- {
- int u,v;
- scanf("%d%d",&n,&m);
- for(int i=1;i<=m;i++){
- scanf("%d%d",&u,&v);
- add(u,v); add(v,u);
- }
- nxt[0]=1;
- for(int i=1;i<=n+1;i++){
- pre[i]=i-1;
- nxt[i]=i+1;
- }
- tot=0;
- for(int i=nxt[0];i<=n;i=nxt[0]){
- ans=0;
- del(i); bfs(i);
- final[++tot]=ans;
- }
- sort(final+1,final+tot+1);
- printf("%d\n",tot);
- for(int i=1;i<=tot;i++)
- printf("%d ",final[i]);
- return 0;
- }
bzoj 1098 poi2007 办公楼 bfs+链表的更多相关文章
- BZOJ 1098: [POI2007]办公楼biu 链表
求补图连通块,用链表优化,势能O(n+m) #include<cstdio> #include<cstring> #include<iostream> #inclu ...
- bzoj 1098 [POI2007]办公楼biu——链表
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1098 求补图的连通块大小.与自己没有边的和自己在一个连通块里. 用链表把所有点串起来.先给自 ...
- [BZOJ 1098] [POI2007] 办公楼biu 【链表优化BFS】
题目链接:BZOJ - 1098 题目分析 只有两个点之间有边的时候它们才能在不同的楼内,那么就是说如果两个点之间没有边它们就一定在同一座楼内. 那么要求的就是求原图的补图的连通块. 然而原图的补图的 ...
- 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(反向图bfs+并查集优化)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1098 [题目大意] 现在有一张图,要求将这张图的点划分为尽量多的分组,对于不同分组的两 ...
- 【刷题】BZOJ 1098 [POI2007]办公楼biu
Description FGD开办了一家电话公司.他雇用了N个职员,给了每个职员一部手机.每个职员的手机里都存储有一些同事的 电话号码.由于FGD的公司规模不断扩大,旧的办公楼已经显得十分狭窄,FGD ...
- bzoj 1098 [POI2007] 办公楼 biu
# 解题思路 画画图可以发现,只要是两个点之间没有相互连边,那么就必须将这两个人安排到同一个办公楼内,如图所示: 那,我们可以建立补图,就是先建一张完全图,然后把题目中给出的边都删掉,这就是一张补图, ...
- BZOJ_1098_[POI2007]办公楼biu_链表优化BFS
BZOJ_1098_[POI2007]办公楼biu_链表优化BFS Description FGD开办了一家电话公司.他雇用了N个职员,给了每个职员一部手机.每个职员的手机里都存储有一些同事的 电话号 ...
- 【BZOJ】1098: [POI2007]办公楼biu(补图+bfs+链表)
http://www.lydsy.com/JudgeOnline/problem.php?id=1098 显然答案是补图连通块..... 想到用并查集...可是连补图的边都已经...n^2了...怎么 ...
随机推荐
- OpenLayers3中wfs的属性查询
var vector = new ol.layer.Vector({ source: new ol.source.Vector({ format: new ol.format.GeoJSON(), u ...
- java常用数据库连接池 (DBCP、c3p0、Druid) 配置说明
1. 引言 1.1 定义 数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出.对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标.数据库 ...
- c#实例化继承类,必须对被继承类的程序集做引用
0x00 问题 类型“Model.NewModel”在未被引用的程序集中定义.必须添加对程序集“Model, Version=1.0.0.0, Culture=neutral, PublicKeyTo ...
- jQuery插件之-----弹性运动
<!doctype html><html><head><meta charset="utf-8"><title>弹性运动 ...
- plsql使用
本文由jay8605162432贡献 本课重点: 1.写 SELECT 语句进行数据库查询 2.进行数学运算 3.处理空值 4.使用别名 ALIASES 5.连接列 6.在 SQL PLUS 中编辑缓 ...
- 如何卸载Centos自带jdk
1.搜索安装的jdk: rpm -qa|grep jdk 结果如下: java-1.7.0-openjdk-1.7.0.45-2.4.3.3.el6.x86_64 java-1.6.0-openjdk ...
- Ajax的简单使用
仅介绍Ajax的使用,让入门小白快速上手 //请自行引入jQuery库文件 <script type="text/javascript"> $(function() { ...
- iframe中 父页面和子页面查找元素的方法
从父页面中查找iframe子页面中对象的方法:JS: document.getElementById('iframe').contentWindow //查找iframe加载的页面的window对象 ...
- Python教程大纲
缘起:最近想在部门推Python语言,写这个blog主要就是个教程大纲,之前先列出一些资源:Python历史:http://www.docin.com/p-53019548.html ...
- DDGScreenShot—图片擦除功能
写在前面 图片擦除功能,也是运用图片的绘制功能, 将图片绘制后,拿到相应的图片.当然,有一涨底图更明显 实现代码如下 /** ** 用手势擦除图片 - imageView --传图片 - bgView ...