BZOJ 1098: [POI2007]办公楼biu 补图联通块个数,链表优化

【论题选编】稠密图最短路 有的最短路题目中,可能边的数目很大,朴素建图边的数目为 O(∣V∣2)O(|V|^2)O(∣V∣2)。这样很难直接应用 Dijkstra 算法等。 对付这种图,一般采用的策略是: 去除无用选项。有可能两点之间直接连接的路径长一定不是最短路径,这样就可以排除大多数路径,只构造那些有用的边。 构造等价选项。有可能两点之间的路径长完全等价于按照某种简单模式形成的路径长,这样就可以考虑这种简单的模式。 优化建图方式。例如建立虚拟点,以代替完全子图中各个点之间的相互连边。 例 1:最短路 1 题意:有 nnn 个 阅读详情

Description

  FGD开办了一家电话公司。他雇用了N个职员,给了每个职员一部手机。每个职员的手机里都存储有一些同事的
电话号码。由于FGD的公司规模不断扩大,旧的办公楼已经显得十分狭窄,FGD决定将公司迁至一些新的办公楼。FG
D希望职员被安置在尽量多的办公楼当中,这样对于每个职员来说都会有一个相对更好的工作环境。但是,为了联
系方便起见,如果两个职员被安置在两个不同的办公楼之内,他们必须拥有彼此的电话号码。
Input

  第一行包含两个整数N(2<=N<=100000)和M(1<=M<=2000000)。职员被依次编号为1,2,……,N.以下M行,每
行包含两个正数A和B(1<=A
Output

  包含两行。第一行包含一个数S,表示FGD最多可以将职员安置进的办公楼数。第二行包含S个从小到大排列的
数,每个数后面接一个空格,表示每个办公楼里安排的职员数。
Sample Input
7 16

1 3

1 4

1 5

2 3

3 4

4 5

4 7

4 6

5 6

6 7

2 4

2 7

2 5

3 5

3 7

1 7

Sample Output
3

1 2 4
HINT

FGD可以将职员4安排进一号办公楼,职员5和职员7安排进2号办公楼,其他人进3号办公楼

解题方法: 首先注意到,我们直接求这个问题很难求解,所以我们考虑转化,那么可以转化成什么呢? 转化成补图联通块的个数, 这个是在床上突然想到的,补图就是完全图去掉这个图剩下的部分,那么补图的联通块之间有边恰恰对应原图一个集合无边,补图连通块之间无边,恰恰对应原图不在同一集合的点存在边。我们知道这个结论并不能解决这个问题,因为补图显然是稠密图,我们直接遍历边用并查集维护的话显然是(n^2),显然是要T的,然后我也卡住了,翻翻大牛的题解,找打了一种非常NB的方法,是OI的ysq大牛提出的,叫做链表加BFS的强优化,具体是这样的:我们先把所有的节点挂链,然后再把链表上的一个节点入队,遍历其在原图上相邻的点并做上标记,那么这时没有打上标记的点在补图上和当前节点一定有边相连因而一定在同一个联通块中,所以再把这些没有打上标记的点入队,并且在链表中除去,继续这个过程,直到队列为空时这个联通块就找出来了,再取链表上还存在的点入队寻找一个新的联通块,直到删掉所有点为止,复杂度降为了O(n + m)。然后这个题目就可以完美解决了,完结撒花。。

#include <bits/stdc++.h>
using namespace std;
const int maxn = 100010;
const int maxm = 2000010;
int n, m, edgecnt, head[maxn];
struct edge{int v, nxt; } E[maxm*2];
struct link{int pre, nxt; }L[maxn];
void del(int x){
    L[L[x].pre].nxt = L[x].nxt;
    L[L[x].nxt].pre = L[x].pre;
}
void init(){
    memset(head, -1, sizeof(head));
    edgecnt = 0;
}
void addedge(int u, int v){
    E[edgecnt].v = v, E[edgecnt].nxt = head[u], head[u] = edgecnt++;
}
bool vis1[maxn], vis2[maxn]; //vis1标记相邻点,vis2标记在队列的存在状态
int scc[maxn], scccnt;
void bfs(){
    queue <int> q;
    memset(vis1, 0, sizeof(vis1));
    memset(vis2, 0, sizeof(vis2));
    while(L[0].nxt){//还存在节点
        int now = L[0].nxt, curscc = 1;
        del(now);
        q.push(now);
        vis2[now] = 1;
        while(!q.empty()){
            int u = q.front(); q.pop();
            for(int i = head[u]; ~i; i = E[i].nxt) vis1[E[i].v] = 1;
            for(int i = L[0].nxt; i; i = L[i].nxt){
                if(!vis1[i] && !vis2[i]){
                    vis2[i] = 1;
                    q.push(i);
                    curscc++;
                    del(i);
                }
            }
            for(int i = head[u]; ~i; i = E[i].nxt) vis1[E[i].v] = 0; //一定取消相邻节点的标记
        }
        scc[++scccnt] = curscc;
    }
}
int main(){
    init();
    scanf("%d%d", &n, &m);
    for(int i = 1; i <= m; i++){
        int u, v;
        scanf("%d%d", &u, &v);
        addedge(u, v);
        addedge(v, u);
    }
    for(int i = 1; i <= n; i++){
        L[i-1].nxt = i; L[i].pre = i - 1;
    } L[n].nxt = 0;
    bfs();
    sort(scc + 1, scc + scccnt + 1);
    printf("%d\n", scccnt);
    for(int i = 1; i < scccnt; i++) printf("%d ", scc[i]); printf("%d", scc[scccnt]);
    return 0;
}
高精度磁力计RM3100 传感器LR振荡电路偏置电路分析 LR振荡器电路通过正向和反向偏置实现磁场测量。Sen-XY-f/Z-f传感器线圈作为电感元件构成LR弛张振荡电路,其振荡频率随磁场变化而改变。测量时,线圈一端接地,另一端交替通入正反向电流,通过两次偏置测量消除电路自身磁场干扰,仅保留外部磁场影响。MagI2C芯片通过高速时钟测量振荡次数和时间差,计算磁场强度。该设计具有抗干扰强、数字化输出和高分辨率等优势,是RM3100传感器高精度磁测量的核心原理。 阅读详情

相关推荐

网易CodeWave智能生成应用实战:5分钟搞定库存管理系统(附详细配置截图)

本文详细介绍了如何利用网易CodeWave智能生成应用在5分钟内快速构建定制化库存管理系统。通过自然语言描述需求,无需编程即可生成包含产品管理、库存预警等核心功能的应用,并支持字段微调、业务流程注入等深度优化。文章附有详细配置截图,帮助用户高效实现数字化转型。

julia4scientist的博客 886

DFS入门(连通块)

总的来说,连通块中dfs充当的是标记地盘的作用,判断当前点,进行dfs(继续往下搜索)

m0_72677274的博客 6022

Dirsearch的下载、安装和使用(全)

Dirsearch工具的下载、安装和使用,超详细超全面

weixin_68416970的博客 1万+

连通块|c++基础--详细讲解

连通块其实就是求相邻格子的数量、有几块......通常用深度优先搜索来编写。

署髫 1168

企业级 Agent 在 K8s 上的运行模型

Kubernetes├── Agent Orchestrator(控制面)├── Agent Runtime Pods(执行面)├── Graph DSL(流程层)├── Tool Services(能力层)K8s(调度)+ Graph(流程)+ Agent(决策)+ Tool(执行)+ Guard(治理)

一起修行,不孤单。这里有编程语言、开发工具、学习方法论和踩坑笔记。用简单的话说复杂的事,陪你从小白到进阶。周更干货,欢迎一起成长! 1172

面试题-手撕NMS(非极大值抑制)

非极大值抑制(Non-Maximum Suppression,NMS)是一种常用于目标检测和计算机视觉中的算法,用于去除重叠的边界框,保留最可能是真实目标的边界框。其核心就是对一组检测框,找出其中属于同一个类别且分数最高的那个框,然后把和这个框的IOU值大于阈值的那些框都删掉。

zhaoyqcsdn的博客 1108

“ 一条路走到黑,不撞南墙不回头”——C++【DFS(深度优先搜索算法)】入门讲解

DFS(Depth First Search)简称“深搜”,是个得分利器。正如标题所述,这个算法的特点就是:一条路走到黑,不撞南墙不回头。通俗地说,即在遍历时,优先选择一条路,往搜索树的深层遍历,当不能继续深入时则返回上一层,选择另一个岔路遍历。深度优先搜索按照深度优先的方式进行搜索,通俗点说就是 〃一条路走到黑〃。注意,这里的 〃搜索〃是一种穷举的方式,把所有可行的方案都列出来,不断去尝试,直到找到问题的解。深度优先搜索和递归的区别是:深度优先搜索是一种算法,注重的是思想;

AmyZhangXiwen的博客 2206

Livox MID360与Fast-LIO2的实战部署指南:从驱动安装到点云处理

本文提供Livox MID360激光雷达与Fast-LIO2激光惯性里程计从零开始的实战部署指南。详细介绍了Ubuntu系统下的驱动安装、网络配置、点云数据验证以及Fast-LIO2算法的编译、参数配置与联合启动流程,帮助开发者快速搭建移动机器人SLAM系统,并包含关键参数调优与常见故障排查方法。

java5的博客 1024

联通块的使用

【代码】联通块的使用和技巧

a360070488的博客 184

Plecs电力电子仿真专业教程-第一季 第一节 Plecs简介

Plces 电力电子仿真专业教程系列依托专业的电力电子仿真软件Plecs对各种电力电子常用的拓扑及实际设计的方案进行系统及仿真与软件代码仿真实践。通过对各种电路仿真原理的讲解及专业C语言代码程序的编写,提升学员的系统设计能力,软件编程能力与理论分析能力。

3641

YOLOv8改进 | 卷积模块 | 用DWConv卷积替换Conv【轻量化网络】

YOLOv8改进,yolov8,yolov8创新,yolov8涨点

kay_545 7156

BZOJ_1098_[POI2007]办公楼biu_链表优化BFS

BZOJ_1098_[POI2007]办公楼biu_链表优化BFS Description   FGD开办了一家电话公司。他雇用了N个职员,给了每个职员一部手机。每个职员的手机里都存储有一些同事的 电话号码。由于FGD的公司规模不断扩大,旧的办公楼已经显得十分狭窄,FGD决定将公司迁至一些新的办公楼。FG D希望职员被安置在尽量多的办公楼当中,这样对于每个职员来说都会有一个相...

197

1.5 RAG技术栈全景图:LangChain vs LlamaIndex深度对比,选错框架后悔3年,一文帮你选对

摘要:LangChain与LlamaIndex框架深度对比 本文全面对比了RAG领域两大主流框架LangChain和LlamaIndex。LangChain是通用AI应用框架,具有模块化设计和丰富生态;LlamaIndex专为RAG优化,提供开箱即用解决方案。功能对比显示,LangChain在文档加载和Agent支持方面更强,而LlamaIndex在检索策略、向量存储和多模态处理上表现更优。代码示例展示了二者实现RAG的不同方式:LangChain需要更多配置但灵活性高,LlamaIndex则提供更简洁的A

yonggeit的博客 3239

【BZOJ1098】[POI2007]办公楼biu【BFS/DFS】【链表优化】【补图】

求补图的联通块个数... 发现链表原来还可以这么玩... 听说DFS会超时。 /* Footprints In The Blood Soaked Snow */ #include #include using namespace std; const int maxn = 100005, maxm = 2000005, maxq = maxn; int n,

BraketBN 1144

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

【bzoj1098】 [POI2007]办公楼biu

题目描述: FGD开办了一家电话公司。他雇用了N个职员,给了每个职员一部手机。每个职员的手机里都存储有一些同事的电话号码。由于FGD的公司规模不断扩大,旧的办公楼已经显得十分狭窄,FGD决定将公司迁至一些新的办公楼。 FGD希望职员被安置在尽量多的办公楼当中,这样对于每个职员来说都会有一个相对更好的工作环境。但是,为了联系方便起见,如果两个职员被安置在两个不同的办公楼之内,他们必须拥有...

diaopinshuo4087的博客 171

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

[BZOJ1098][POI2007]办公楼biu

Description  FGD开办了一家电话公司。他雇用了N个职员,给了每个职员一部手机。每个职员的手机里都存储有一些同事的 电话号码。由于FGD的公司规模不断扩大,旧的办公楼已经显得十分狭窄,FGD决定将公司迁至一些新的办公楼。FG D希望职员被安置在尽量多的办公楼当中,这样对于每个职员来说都会有一个相对更好的工作环境。但是,为了联 系方便起见,如果两个职员被安置在两个不同的办公楼之内,他

qq_15412011的博客 354

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

BZOJ 1098: [POI2007]办公楼biu

题意:FGD开办了一家电话公司。他雇用了N个职员,给了每个职员一部手机。每个职员的手机里都存储有一些同事的电话号码。由于FGD的公司规模不断扩大,旧的办公楼已经显得十分狭窄,FGD决定将公司迁至一些新的办公楼。 FGD希望职员被安置在尽量多的办公楼当中,这样对于每个职员来说都会有一个相对更好的工作环境。但是,为了联系方便起见,如果两个职员被安置在两个不同的办公楼之内,他们必须拥有彼此的电话号码。我们

MatouKariya的专栏 1890

bzoj-1098: [POI2007]办公楼biu

1098: [POI2007]办公楼biu Time Limit: 20 Sec  Memory Limit: 162 MB Submit: 737  Solved: 306 [Submit][Status] Description FGD开办了一家电话公司。他雇用了N个职员,给了每个职员一部手机。每个职员的手机里都存储有一些同事的电话号码。由于FGD的公司规模不断扩大,旧的办公楼已

WZJRJ28 954

BZOJ1098: [POI2007]办公楼biu

BZOJ1098: [POI2007]办公楼biu链表·乱搞题解:这真的是一道令人耳目一新的题!首先很容易看出答案就是补图的连通块个数,但是补图有O(n2)O(n^2)条边啊QWQ 在不建立补图的情况下,对于一个点,遍历其原图中的边,哪些点没访问到,它们就是补图中能走到的点。很遗憾,这样还是O(n2)O(n^2)我们发现“遍历所有点看哪个没访问到”这个步骤做了很多无用功,因为很多点可能已经确定了它

FTM's Blog 356

bzoj 1098: [POI2007]办公楼biu

Description FGD开办了一家电话公司。他雇用了N个职员,给了每个职员一部手机。每个职员的手机里都存储有一些同事的电话号码。由于FGD的公司规模不断扩大,旧的办公楼已经显得十分狭窄,FGD决定将公司迁至一些新的办公楼。 FGD希望职员被安置在尽量多的办公楼当中,这样对于每个职员来说都会有一个相对更好的工作环境。但是,为了联系方便起见,如果两个职员被安置在两个不同的办公楼之内,他们必

lqybzx的专栏 940

BZOJ1098 POI2007 办公楼biu 【链表+bfs】

Description FGD开办了一家电话公司。他雇用了N个职员,给了每个职员一部手机。每个职员的手机里都存储有一些同事的电话号码。由于FGD的公司规模不断扩大,旧的办公楼已经显得十分狭窄,FGD决定将公司迁至一些新的办公楼。FGD希望职员被安置在尽量多的办公楼当中,这样对于每个职员来说都会有一个相对更好的工作环境。但是,为了联系方便起见,如果两个职员被安置在两个不同的办公楼之内,他们必须拥有彼...

weixin_30836759的博客 182

【链表】Bzoj1098[POI2007]办公楼biu

Description FGD开办了一家电话公司。他雇用了N个职员,给了每个职员一部手机。每个职员的手机里都存储有一些同事的电话号码。由于FGD的公司规模不断扩大,旧的办公楼已经显得十分狭窄,FGD决定将公司迁至一些新的办公楼。 FGD希望职员被安置在尽量多的办公楼当中,这样对于每个职员来说都会有一个相对更好的工作环境。但是,为了联系方便起见,如果两个职员被安置在两个不同的办公楼之内,他们必...

weixin_30551963的博客 150

【BZOJ1098】[POI2007]办公楼biu

题目一开始看以为和强联通分量有关,后来发现是无向边,其实就是求原图的补图的联通块个数和大小。学习了黄学长的代码,利用链表来优化,其实就是枚举每一个人,然后把和他不相连的人都删去放进同一个联通块里,利用bfs来实现。——by VANE #include<bits/stdc++.h> using namespace std; const int N=100005; const ...

weixin_30593261的博客 92

【bzoj1098】[POI2007]办公楼biu

DescriptionFGD开办了一家电话公司。他雇用了N个职员,给了每个职员一部手机。每个职员的手机里都存储有一些同事的电话号码。由于FGD的公司规模不断扩大,旧的办公楼已经显得十分狭窄,FGD决定将公司迁至一些新的办公楼。 FGD希望职员被安置在尽量多的办公楼当中,这样对于每个职员来说都会有一个相对更好的工作环境。但是,为了联系方便起见,如果两个职员被安置在两个不同的办公楼之内,他们必须拥有彼此

wang_sj的博客 380

POI乱刷计划题解

简单: bzoj 3524: [Poi2014]Couriers 区间第mid大…… bzoj 1113: [Poi2008]海报PLA 单调栈裸题。 bzoj 1131: [POI2008]Sta 树形dp裸题。 bzoj 1115: [POI2009]石子游戏Kam 差分后就是经典阶梯博弈。 bzoj 1116: [POI2008]CLO 容易发现一个连...

fyc的博客 977

C++ | 用DFS和BFS实现联通块问题——可解最短路径

对于蓝色的小块而言,四联通块(题目不说一般都是四联通)就是周围红色的区域,是可到达的位置,八联通块是加上黄色的位置。

lly18435759909的博客 843
上一篇: BZOJ 1097: [POI2007]旅游景点atr 状压,预处理,最短路
下一篇: BZOJ 1101: [POI2007]Zap 莫比乌斯反演
just_sort
博客等级 码龄11年 2357粉丝 1667原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值