当前位置: 首页 > news >正文

数据中心 第十五次CCF-CSP计算机软件能力认证

总结一下图树算法比如krusal 迪杰斯特拉 prim算法喜欢改变距离定义 或者求别的东西

而拓扑排序喜欢大模拟

本题使用kerusal算法求出最后一条边就可以。

ac代码:
 

#include <iostream>
#include <vector>
#include <algorithm>using namespace std;// l,r为 边两边的节点,val为边的数值
struct Edge {int l, r, val;
};// 节点数量
int n = 50002;
// 并查集标记节点关系的数组
vector<int> father(n, -1); // 节点编号是从1开始的,n要大一些// 并查集初始化
void init() {for (int i = 0; i < n; ++i) {father[i] = i;}
}// 并查集的查找操作
int find(int u) {return u == father[u] ? u : father[u] = find(father[u]); // 路径压缩
}// 并查集的加入集合
void join(int u, int v) {u = find(u); // 寻找u的根v = find(v); // 寻找v的根if (u == v) return; // 如果发现根相同,则说明在一个集合,不用两个节点相连直接返回father[v] = u;
}int main() {int v, e;int root;int v1, v2, val;vector<Edge> edges;int result_val = 0;cin >> v >> e>>root;while (e--) {cin >> v1 >> v2 >> val;edges.push_back({ v1, v2, val });}// 执行Kruskal算法// 按边的权值对边进行从小到大排序sort(edges.begin(), edges.end(), [](const Edge& a, const Edge& b) {return a.val < b.val;});// 并查集初始化init();// 从头开始遍历边for (Edge edge : edges) {// 并查集,搜出两个节点的祖先int x = find(edge.l);int y = find(edge.r);// 如果祖先不同,则不在同一个集合if (x != y) {//最后为最后一次加入该最小生成树的边.result_val = edge.val;join(x, y); // 两个节点加入到同一个集合}}cout << result_val << endl;return 0;
}

相关文章:

  • 护照阅读器简介
  • Spring MVC Controller 方法的返回类型有哪些?
  • Android Car Input HAL
  • MCP学习
  • C++初阶 —— 类和对象
  • 如何使用UGUI的EventTrigger
  • 南京大学OpenHarmony技术俱乐部正式揭牌 仓颉编程语言引领生态创新
  • 汽车免拆诊断案例|车辆行驶中急加速车身抖动故障排除 2 例
  • 台州智惠自动化签约智橙PLM,让创新持续发生
  • 挑战用豆包教我学Java01天
  • 软件测试需求之测试类型分析
  • Xilinx XCKU11P-2FFVA1156I 赛灵思 FPGA AMD Kintex UltraScale+
  • linux下MySql的安装与配置
  • java实现一个操作日志模块功能,怎么设计
  • 黄金分割法(0.618 法)
  • 机器学习实操 第二部分 神经网路和深度学习 第14章 使用卷积神经网络进行深度计算机视觉
  • 【LLM+Code】Devin PromptTools详细解读
  • AI与Web3.0:去中心化智能合约的未来
  • PostgreSQL中“参数默认值实现伪重载“详解
  • neo4j多跳查询,未只获取到收尾两个节点,待继续
  • 韩国执政党总统候选人更换方案被否决,金文洙候选人资格即刻恢复
  • 央行:中国政府债务扩张仍有可持续性
  • 央行:当前我国债券市场定价效率、机构债券投资交易和风险管理能力仍有待提升
  • “降息潮”延续!存款利率全面迈向“1时代”
  • 数理+AI+工程,上海交大将开首届“笛卡尔班”招生约20名
  • 大四本科生已发14篇SCI论文?重庆大学:成立工作组核实