CCF201912-4 区块链(100分)模拟

Posted 海岛Blog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CCF201912-4 区块链(100分)模拟相关的知识,希望对你有一定的参考价值。

试题编号: 201912-4
试题名称: 区块链
时间限制: 10.0s
内存限制: 512.0MB





问题链接CCF201912-4 区块链
问题简述:(略)
问题分析:模拟题,不解释。
程序说明:(略)
参考链接:(略)
题记:(略)

100分的C++语言程序如下:

/* CCF201912-4 区块链 */

#include <bits/stdc++.h>

using namespace std;

struct Node {
    int ctime;      // 当前时间
    int now;        // 当前结点编号
    int id;     // 邻居结点对应的链编号
    int father; // 邻居结点编号
};

const int N = 500 + 1;
vector<int> g[N];
queue<Node> q;
vector<vector<int> > l;
int data[N];


int main()
{
    std::ios::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);

    int n, m, u, v, t, k, a, b, c;
    cin >> n >> m;
    for (int i = 1; i <= m; i++) {
        cin >> u >> v;
        g[u].push_back(v);
        g[v].push_back(u);
    }

    memset(data, 0, sizeof data);
    l.push_back({0});       // 初始链长为1,只有一个块0

    cin >> t >> k;
    while (k--) {
        cin >> a >> b;

        int flag = 0;
        while (!q.empty() && q.front().ctime <= b) {
            Node f = q.front();
            q.pop();
            int ctime = f.ctime;
            int id = f.id;
            int now = f.now;
            int father = f.father;
            if (l[id].size() < l[data[now]].size() ||
                    (l[id].size() == l[data[now]].size() &&
                     l[id].back() >= l[data[now]].back()))
                continue;
            data[now] = id;
            flag = 1;
            for (auto v2:g[now])
                if (v2 != father) q.push({ctime + t, v2, id, now});
        }

        if (cin.get() == '\\n' || cin.eof()) {
            cout << l[data[a]].size();
            for (auto v2:l[data[a]])
                cout << " " << v2;
            cout << '\\n';
        } else {
            // 更新主链
            cin >> c;
            vector<int> tmp = l[data[a]];
            tmp.push_back(c);
            l.push_back(tmp);
            data[a] = l.size() - 1;
            flag = 1;
        }

        // 修改主链成功,更新邻居
        if (flag)
            for (auto v2:g[a])
                q.push({b + t, v2, data[a], a});
    }

    return 0;
}

以上是关于CCF201912-4 区块链(100分)模拟的主要内容,如果未能解决你的问题,请参考以下文章

csp 201912-4区块链 80分

CSP第18次 201912-4 区块链 C/C++答案

CCF201912-1 报数(100分)模拟

CCF 201703-3 Markdown 100分

CCF 201703-3 Markdown 100分

CCF 201703-3 Markdown 100分