博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ 1098 [POI2007]办公楼biu(反向图bfs+并查集优化)
阅读量:4654 次
发布时间:2019-06-09

本文共 716 字,大约阅读时间需要 2 分钟。

 

【题目链接】 

 

【题目大意】

  现在有一张图,要求将这张图的点划分为尽量多的分组,对于不同分组的两个点

  要求必须存在连边。

 

【题解】

  不同分组之间的两点必须连边等价于没有连边的点一定在同一分组内,

  所以题目转化为求反图的连通块和其大小,搜索的理论复杂度O(n^2),显然不行,
  bfs的时候对于已经归入其余连通块的点用并查集进行段无效信息处理,减少搜索树的分支,
  显然经过这样的处理搜索分支的数量下降得非常快,就能顺利解决此题了。

 

【代码】

#include 
#include
#include
#include
using namespace std;const int N=100010;int f[N],n,m,vis[N],ans,cnt[N];vector
v[N];int sf(int x){return f[x]==x?x:f[x]=sf(f[x]);}void bfs(int st){ queue
q; q.push(st); cnt[++ans]=1; while(q.size()){ int x=q.front();q.pop();f[x]=sf(x+1); for(int i=0;i

转载于:https://www.cnblogs.com/forever97/p/bzoj1098.html

你可能感兴趣的文章
BZOJ3790神奇项链——manacher+贪心
查看>>
sublime text 3 搭建python ide
查看>>
python爬虫工具
查看>>
java应用CPU占用100%内存泄漏分析总结(转载)
查看>>
《Qt Quick 4小时入门》学习笔记
查看>>
《疯狂Java讲义》(二十八)---- 异常
查看>>
getEditableConfigNames
查看>>
《A First Course in Probability》-chaper5-连续型随机变量-随机变量函数的期望
查看>>
java 原生PraparedStatement操作数据库
查看>>
模拟 [bzoj 4582] Diamond Collector
查看>>
window.onload和$(document).ready()的区别
查看>>
BZOJ-1009 GT考试
查看>>
View()/Redirect()/RedirectToAction()的区别(控制器调用另一个控制器||视图)
查看>>
slice、splice与split傻傻分不清
查看>>
jsp-自定义标签
查看>>
算法复习周------递归之“快速排序”
查看>>
hadoop 2.2.0 编译报错: [ERROR] class file for org.mortbay.component.AbstractLifeCycle not found
查看>>
Java第九章枚举&注解
查看>>
css 三角形样式
查看>>
Python openpyxl解析Excel
查看>>