前言
省选复习的时候,发现没写博客。。。
来补一篇。。
最小树形图
就是有向图的最小生成树,满足从根出发,能到达所有节点,且边权和尽可能小。
朱刘算法
很暴力的方法,每个点在指向它的边中,选择最小的一条(根节点不选)。
然后答案加上每个点选出的边权。
然后可能有环,就缩环成点,然后改一下边权
val’-=val,表示之后若选择val’,则必须断开val
一直这样做下去,直到某一次找不到环了就停止。
复杂度 O ( N ∗ M ) O(N*M) O(N∗M)
模板题
BZOJ4349
第一次是最小树形图,第二次及以后攻打,就用最小的即可。
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<vector>
#define SF scanf
#define PF printf
#define INF 0x3FFFFFFF
#define MAXN 60
#define MAXM 2600
using namespace std;
struct Edge{
int u,v;
double val;
Edge() {
}
Edge(int u1,int v1,double val1):u(u1),v(v1),val(val1) {
}
}edge[MAXM];
int nu