CSP22.3 T4通信系统管理

news2024/11/15 18:43:20

之前在CCF CSP认证2022年3月完整题解这篇博客记录了自己花了两天时间乱搞出来的方法,但是实际上动态维护区间最值,通过 s e t set set实现会更简洁,用优先队列需要额外开数组记录堆中节点的有效性。

而且在处理额度失效上,我也使用了最小堆,其实没必要,用 m a p < l l , t u p l e > map<ll,tuple> map<ll,tuple> 即可,tuple 存储端点,和失效额度值。实际上,时间是以天为单位连续的,范围为1e5,用数组存储也可以,但用 m a p map map 是动态开辟空间,优化空间使用。

之前我将问题复杂化主要是不了解 s e t set set m a p map map 这两个结构的底层实现是平衡树,节点之间存在大小关系,通过迭代器访问获得的是有序的节点序列,这也要求我们定义结构体储存与这两个结构时重载小于号,定义这种大小关系。

摘自之前的 blog:
在这里插入图片描述
以下是看了 yhf 学长的 live coding ,自己写了一遍并整理思路。

思路

主要通信对象
维护每个节点的主要通信对象,而节点和其他诸多节点时间有多个流量(额度),要维护其中最大者,流量相同则编号最小者,定义流量如下:

struct node {
    ll v; int to;

    node(ll v, int to) : v(v), to(to) {}
    bool operator < (const node &d) const {
        return v == d.v ? to < d.to : v > d.v;
    }
};

存储于 s e t < n o d e > d [ m a x n ] set<node> d[maxn] set<node>d[maxn] 结构,如何更新?将原流量 erase ,重新 insert 新流量。最大者为 d [ i ] . b e g i n ( ) − > t o d[i].begin()->to d[i].begin()>to.

孤岛、通信对
通过 i s l o n e l y islonely islonely 函数判断更新前后节点是否为孤岛,判据为没有流量或者流量为0,;
通过 i s p a i r ispair ispair 判断节点是否包含“通信对”关系,首先节点不为孤岛,然后,找到它的主要通信对象 y y y ,看 y y y 的对象是否是自己,这里注意,由于 w o r k work work 对节点对的对称操作是先后进行,不同步(实际肯定是同时发生), y y y 可能先操作并且变为“孤岛”了,因此要保证 y y y 不是“孤岛”:

return (!islonely(y) && d[y].begin()->to == x);

代码

using ll = long long;
const int maxn = 1e5 + 10;

// 通信主要通信对象
// 通信孤岛、通信对
// n, m:1e5

struct node {
    ll v; int to;

    node(ll v, int to) : v(v), to(to) {}
    bool operator < (const node &d) const {
        return v == d.v ? to < d.to : v > d.v;
    }
};

struct info {
    int u, v, x;
    info(int u, int v, int x) : u(u), v(v), x(x) {}
};

set<node> d[maxn];
map<pair<int, int> , ll> save;  // 维护点对实时额度
vector<info> decr[maxn];
int pv, qv; // 通信孤岛、通信对数

int islonely(int x) {
    return (d[x].begin() == d[x].end() || d[x].begin()->v == 0);
}   // 检查是否孤岛

int ispair(int x) {
    if (islonely(x)) return 0;
    int y = d[x].begin()->to;
    return (!islonely(y) && d[y].begin()->to == x);
}   // 检查是否包含通讯对

void work(int u, int v, int x) {
    ll origVal = save[{u, v}];
    save[{u, v}] += x;

    pv -= islonely(u);
    qv -= ispair(u);

    node orig(origVal, v);
    d[u].erase(orig);
    d[u].emplace(save[{u, v}], v);

    pv += islonely(u);
    qv += ispair(u);
}   // 节点u的额度申请、过期

void solve() {
    int n, m;
    cin >> n >> m;
    pv = n; qv = 0;

    for (int i = 1; i <= m; i++) {
        // 处理过期额度
        for (const auto &t : decr[i]) {
            work(t.u, t.v, -t.x);
            work(t.v, t.u, -t.x);
        }
        int k, l, num, p, q;
        // 当天额度申请
        cin >> k;
        int u, v, x, y;
        for (int j = 1; j <= k; j++) {
            cin >> u >> v >> x >> y;
            if (i + y <= m) decr[i + y].emplace_back(u, v, x);
            work(u, v, x);
            work(v, u, x);
        }
        // 查询通信主要通信对象
        cin >> l;
        for (int j = 1; j <= l; j++) {
            cin >> num;
            if (islonely(num)) {
                cout << "0\n";
            }
            else {
                cout << d[num].begin()->to << '\n';
            }
        }
        // 查询通信孤岛、通信对
        cin >> p >> q;
        if (p) cout << pv << '\n';
        if (q) cout << qv << '\n';

//        cout << '\n';
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/83468.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

教你用响应式建站平台搭建网站

响应式网站搭建大家知道是什么吗&#xff1f;我们可以经常听到PC端网站、移动端网站&#xff0c;这些就是为特定终端而制作的网站版本&#xff0c;而响应式网站就是一个网站能够兼容多个终端&#xff0c;而不是为每个终端做一个特定的版本。那么我们怎么用响应式建站平台搭建网…

基于极限学习机(ELM)进行多变量用电量预测(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️❤️&#x1f4a5;&#x1f4a5;&#x1f4a5; &#x1f389;作者研究&#xff1a;&#x1f3c5;&#x1f3c5;&#x1f3c5;本科计算机专业&#xff0c;研究生电气学硕…

使用adb命令导出hprof文件

我们可以使用android studio profiler导入hprof文件分析android应用的内存问题。那么如何从手机上面导出这份文件呢&#xff1f; 把应用的heap 区的数据取出来保存在一个hprof文件上&#xff0c;然后把hprof文件导入到可以查看这个文件的工具上&#xff08;如android studio p…

Spring Security总结

目录 介绍 项目搭建 Security认证 UserDetailsService 内存认证 数据库认证 PasswordEncoder密码解析器 自定义登录页面 退出登录 CSRF防护 Remember me Security授权 RBAC 权限表设计 查询访问权限 配置类设置访问权限 自定义访问控制逻辑 注解设置访问权限 Secured Pre…

29.前端笔记-HTML-Html5的新特性

目录1、HtML5新增的语义化标签2、HTML5新增的多媒体标签&#xff08;1&#xff09;音频标签&#xff1a;< audio>audio的常见属性&#xff08;2&#xff09;视频标签&#xff1a;< video>video常见属性3、新增表单元素input的类型type4、新增表单属性1、HtML5新增的…

R语言中的生存分析Survival analysis晚期肺癌患者4例

第1部分&#xff1a;生存分析简介 最近我们被客户要求撰写关于生存分析的研究报告&#xff0c;包括一些图形和统计输出。本演示文稿将介绍生存分析 &#xff0c;参考&#xff1a; Clark, T., Bradburn, M., Love, S., & Altman, D. (2003). Survival analysis part I: Ba…

06 数学软件与建模---拟合

一、知识储备 1.曲线拟合问题的提法 已知一组&#xff08;二维&#xff09;数据&#xff0c;即平面上 n个点&#xff08;xi,yi) i1,…,n, 寻求一个函数&#xff08;曲线&#xff09;yf(x), 使 f(x) 在某种准则下与所有数据点最为接近&#xff0c;即曲线拟合得最好&#xff0…

前后端分离项目-Springboot 【后端框架搭建,SSM】

1.创建新项目 点击File->New->Project 选择Spring Initializr 填写信息 修改Group修改Artifact修改管理类型Maven&#xff08;带有文件目录&#xff09;修改Java version 选择依赖 这里只需要选择Web->Spring Web即可 创建的文件目录如下 2.创建文件目录 controlle…

【深入浅出Spring原理及实战】「原理分析专题」从零开始教你SpringEL表达式使用和功能分析讲解指南(上篇)

Spring EL表达式语言,这种语言jsp中学到的el,但是在整个spring之中其表达式语言要更加的复杂,而且支持度更加的广泛,最重要的是他可以进行方法的调用,对象的实例化,集合操作等等,但是唯一的难点就是:代码太复杂了,表达式太复杂了。深刻领会,spring中针对于字符串的改进,程序员使…

基于jsp+mysql+ssm医院出车管理与绩效分配系统-计算机毕业设计

项目介绍 本毕业设计主要实现集人性化、高效率、便捷等优点于一身的出车管理系统与绩效分配系统&#xff0c;完成系统用户管理、车辆信息管理、调度员信息管理、驾驶员信息管理、救护员信息管理、科室人员管理、院领导信息管理、调度信息管理、出车统计等功能模块。系统通过浏…

Spring Cloud微服务之loadbalancer负载平衡

Spring Cloud微服务之loadbalancer负载平衡 小学时候&#xff0c;曾经做过这样的数学题。 说有一个水池子&#xff0c;上面有一个排水管&#xff0c;下面有一个进水管&#xff0c;开一个进水管&#xff0c;6个小时灌满水池&#xff0c;开一个排水管&#xff0c;10个小时放光整…

给博客网站添加loading加载中动画代码

只需添加几行代码&#xff0c;就可以加强浏览者的体验,不在等待页面加载时感到枯燥&#xff0c;从而关闭网页&#xff0c;很多网站都会制作一个“网页正在加载中”的提示效果或显示加载进程&#xff0c;加载完成后提示消失&#xff0c;大部分都应用在网站的首页。当然网上很多教…

02时间复杂度与空间复杂度

开始系统学习算法啦&#xff01;为后面力扣和蓝桥杯的刷题做准备&#xff01;这个专栏将记录自己学习算法是的笔记&#xff0c;包括概念&#xff0c;算法运行过程&#xff0c;以及代码实现&#xff0c;希望能给大家带来帮助&#xff0c;感兴趣的小伙伴欢迎评论区留言或者私信博…

如何将多个视频剪辑到一起?如何把两段视频合成一段

如何将多个视频剪辑到一起&#xff1f;那么如何拼接视频&#xff1f;接下来小编就带大家一起了解下有关视频拼接的几款工具推荐。 工具一&#xff1a;TS视频拼合工具 TS视频合并工具是一款轻便简单的视频合并工具&#xff0c;主要是用于合并TS视频文件的工具&#xff0c;当用…

【分享】本地js文件替换源网页js文件的方法

本文所有教程及源码、软件仅为技术研究。不涉及计算机信息系统功能的删除、修改、增加、干扰,更不会影响计算机信息系统的正常运行。不得将代码用于非法用途,如侵立删!本地js文件替换源网页js文件的方法 环境 win10Fiddlerchrome方法一:Fiddler抓包替换js文件 自动回复器–…

HashMap源码分析以及面试题

目录 5、HashMap源码分析 5.1、初始化容量 5.2、负载因子是多少&#xff1f; 5.3、负载因子可以大于或小于0.75吗&#xff1f; 5.4、扩容长度为多少&#xff1f; 5.5、下标是怎么计算的&#xff1f; 5.6、hash冲突&#xff0c;是怎么解决的&#xff1f; 5.7、什么时候…

[附源码]JAVA毕业设计英语课程学习网站(系统+LW)

[附源码]JAVA毕业设计英语课程学习网站&#xff08;系统LW&#xff09; 项目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术…

安装 NVSwitch GPU 服务器的 cuda 驱动版本、nvidia-docker 指南

一&#xff0c;安装 Cuda 驱动 可参考笔者之前写过的文章&#xff1a; 升级 GPU 服务器 cuda 驱动版本指南 如果出现如下报错&#xff0c;则需安装 gcc、kernel-devel&#xff0c;请参考下面第二步安装 gcc、kernel-devel。 二&#xff0c;安装 gcc、kernel-devel 1&#…

基于狮群算法优化的lssvm回归预测-附代码

基于狮群算法优化的lssvm回归预测 - 附代码 文章目录基于狮群算法优化的lssvm回归预测 - 附代码1.数据集2.lssvm模型3.基于狮群算法优化的LSSVM4.测试结果5.Matlab代码摘要&#xff1a;为了提高最小二乘支持向量机&#xff08;lssvm&#xff09;的回归预测准确率&#xff0c;对…

[附源码]计算机毕业设计高校车辆管理系统Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; Springboot mybatis MavenVue等等组成&#xff0c;B/S模式…