洛谷 P4716:【模板】最小树形图 ← 朱-刘算法(普通边数组)
【题目来源】
【题目描述】
给定包含 n 个结点, m 条有向边的一个图。试求一棵以结点 r 为根的最小树形图,并输出最小树形图每条边的权值之和,如果没有以 r 为根的最小树形图,输出 −1。
【输入格式】
第一行包含三个整数 n,m,r,意义同题目所述。
接下来 m 行,每行包含三个整数 u,v,w,表示图中存在一条从 u 指向 v 的权值为 w 的有向边。
【输出格式】
如果原图中存在以 r 为根的最小树形图,就输出最小树形图每条边的权值之和,否则输出 −1。
【输入样例一】
4 6 1
1 2 3
1 3 1
4 1 2
4 2 2
3 2 1
3 4 1
【输出样例一】
3
【输入样例二】
4 6 2
1 2 3
1 3 1
4 1 2
4 2 2
3 2 1
3 4 1
【输出样例二】
-1
【数据范围】
对于所有数据,1≤u,v≤n≤100, 1≤m≤10^4, 1≤w≤10^6。
【算法分析】
● 最小树形图(Minimum Arborescence)就是“有向图 + 指定根”版本的最小生成树。即在一张带权有向图里,找一棵以根 root 为起点、能到达所有点、总权最小的有向树。
● 最小树形图的经典解法是朱-刘算法(Chu-Liu/Edmonds)。朱‑刘算法,得名于中国科学院朱永津、刘振宏两位研究员。1965 年,二人联名发表论文,提出了世界上首个求解 “最小树形图” 的多项式算法,该算法也由此以两位研究者的姓氏合称命名。
● 链式前向星:
【算法代码】
【参考文献】

浙公网安备 33010602011771号