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分)模拟的主要内容,如果未能解决你的问题,请参考以下文章