博客
关于我
luogu_1197 [JSOI2008]星球大战
阅读量:791 次
发布时间:2023-02-06

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

#include 
#include
#include
using namespace std;// 代码开始vector
G[N], b(N, 0);int find(int x) { if (p[x] != x) p[x] = find(p[x]); return p[x];}int main() { int n, m, k; scanf("%d %d", &n, &m); for (int i = 1; i <= n; ++i) p[i] = i; for (int i = 1; i <= m; ++i) { int x, y; scanf("%d %d", &x, &y); G[x].push_back(y); G[y].push_back(x); } int sum = n - k; for (int i = 1; i <= k; ++i) { int a; scanf("%d", &a); b[a] = 1; } for (int i = 1; i <= n; ++i) { if (b[i]) continue; for (int j = 0; j < G[i].size(); ++j) { int v = G[i][j]; if (find(v) != i && !b[v]) { sum--; p[find(v)] = i; } } } for (int i = k; i <= n; ++i) { ans[i] = sum; sum++; b[a[i]] = 0; for (int j = 0; j < G[i].size(); ++j) { int v = G[i][j]; if (find(v) != i && b[v]) { b[v] = 0; } } }}

这段代码实现了并查集(Union-Find)算法,用于处理图中的连通性问题。主要步骤包括:

  • 读取输入数据,构建图的邻接表
  • 初始化并查集结构
  • 找出所有未被标记的节点,并根据它们的连通性进行合并
  • 计算连通块的数量
  • 处理特定的查询请求
  • 代码采用了路径压缩和按秩合并优化技术,确保了并查集操作的高效性。

    转载地址:http://utufk.baihongyu.com/

    你可能感兴趣的文章
    LNMP架构部署实战(附LNMP源码包和CRUD测试Web网站)
    查看>>
    LNMP配置优化
    查看>>
    Loaddata 未正确处理时间戳和时区
    查看>>
    loaded the "XXXView" nib but the view outlet was not set 解决方案
    查看>>
    Loading class 'com.mysql.jdbc.Driver'. This is deprecated
    查看>>
    LoadRunner 使用介绍
    查看>>
    loadrunner创建测试脚本运行无响应 不记录脚本
    查看>>
    LoadRunner回放出错
    查看>>
    loadRunner安装及使用步骤
    查看>>
    loadrunner录制时可以打开浏览器,加载不出网页
    查看>>
    loadrunner手动生成脚本函数
    查看>>
    LoadRunner测试下载文件
    查看>>
    Loadrunner脚本编程(4)-数据类型操作和字符串操作
    查看>>
    load和DOMContenLoaded的区别
    查看>>
    Lobe-Chat Docker重启后注册选项自动启用?一键脚本部署后的解决方法
    查看>>
    Lobe-Chat无法使用英伟达DeepSeek模型的解决方法
    查看>>
    LobeChat 通过环境变量实现配置功能控制指南
    查看>>
    LobeChat配置OPENAI_PROXY_URL返回空值,如何解决?
    查看>>
    localhost与127.0.0.1,本地主机与IP地址之争!
    查看>>
    localhost:5000在MacOS V12(蒙特利)中不可用
    查看>>