[BZOJ 1937][Shoi2004]Mst 最小生成树

本文探讨了在树边权可能减小、非树边权可能增大的情况下,解决非树边覆盖树边的问题。通过将问题转化为带权二分图匹配,运用KM算法求解。文章提供了详细的算法实现过程,包括初始化、深度优先搜索、匈牙利算法的增强路径寻找等步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

传送门

$ \color{red} {solution:} $

对于每条树边\(i\),其边权只可能变小,对于非树边\(j\),其边权只可能变大,所以对于任意非树边覆盖的树边有 \(wi - di <= wj + dj\),
变形一下 \(wi - wj <= di +dj\), 而这一部分正是带权二分图匹配,可以使用\(KM\)算法
不会\(KM\)算法的同学这里有篇算法介绍;

 #include <bits/stdc++.h>
using namespace std;

const int maxn = 10010, inf = 0x3f3f3f3f;

template <typename T> inline bool check_Max(T &x, const T &y) {
    return x < y ? x = y, false : true;
}

template <typename T> inline bool check_Min(T &x, const T &y) {
    return x > y ? x = y, false : true; 
}

struct edge {int u, v, w; } E[maxn];

int v[maxn], to[maxn], head[maxn], pos[maxn], p;
inline void link(int a, int b, int c) {
    v[++ p] = b; to[p] = head[a]; head[a] = p; pos[p] = c;
}

inline void init() {
    p = 1; memset(head, 0, sizeof(head));
}

int dep[maxn], fa[maxn], rfe[maxn];
inline void dfs(int u, int f) {
    dep[u] = dep[f] + 1; fa[u] = f;
    for ( int i = head[u]; i; i = to[i]) if( v[i] ^ f) 
        rfe[v[i]] = i >> 1, dfs(v[i], u);
}

int a[1010][1010], pre[maxn], slack[maxn], vis[maxn], mat[maxn], tot;
int lv[maxn], rv[maxn];

inline void aug(int s) {
    for ( int i = 0; i <= tot; ++ i) slack[i] = inf, vis[i] = pre[i] = 0;
    int u = 0; mat[u] = s;
    do {
        int now = mat[u], d = inf, nxt; vis[u] = 1;
        for ( int v = 1; v <= tot; ++ v) if( !vis[v]){
            if( !check_Min(slack[v], lv[now] + rv[v] - a[now][v])) 
                pre[v] = u;
            if( !check_Min(d, slack[v])) nxt = v;
        }
        for ( int i = 0; i <= tot; ++ i) 
            if( vis[i]) lv[mat[i]] -= d, rv[i] += d;
            else slack[i] -= d;
        u = nxt;
    } while ( mat[u]);
    while ( u) mat[u] = mat[pre[u]], u = pre[u];
}

int n, m;

int main() {
#ifndef ONLINE_JUDGE
    freopen("1.in","r",stdin);
#endif
    init();
    scanf("%d%d", &n, &m); tot = max(n-1, m-n+1);
    for ( int i = 1; i <= m; ++ i) {
        scanf("%d%d%d", &E[i].u, &E[i].v, &E[i].w);
        if( E[i].u > E[i].v) swap(E[i].u, E[i].v);
    }
    for ( int i = 1, u, v; i < n; ++ i) {
        scanf("%d%d", &u, &v); if( u > v) swap(u, v);
        for ( int k = 1; k <= m; ++ k) if( E[k].u == u && E[k].v == v) {
            vis[k] = 1, link(u, v, E[k].w), link(v, u, E[k].w); break;
        }
    }
    dfs(1, 0);
    int num = 0;
    for ( int i = 1; i <= m; ++ i) if( !vis[i]) {
        int u = E[i].u, v = E[i].v, c; ++ num;
        while ( u ^ v) {
            if( dep[u] < dep[v]) swap(u, v);
            c = rfe[u];
            a[c][num] = pos[c << 1] - E[i].w; u = fa[u];
        }
    }
    for ( int i = 1; i <= tot; ++ i) 
        for ( int k = 1; k <= tot; ++ k) check_Max(lv[i], a[i][k]);
    for ( int i = 1; i < n; ++ i) aug(i);
    int ans = 0; 
    for ( int i = 1; i <= tot; ++ i) ans += lv[i] + rv[i];
    printf("%d\n", ans);
    return 0;
}

1365853-20181016170556936-1265459248.gif

转载于:https://www.cnblogs.com/miecoku/p/9799116.html

内容概要:本文围绕直流微电网中带有恒功率负载(CPL)的DC/DC升压转换器的稳定控制问题展开研究,提出了一种复合预设性能控制策略。首先,通过精确反馈线性化技术将非线性不确定的DC转换器系统转化为Brunovsky标准型,然后利用非线性扰动观测器评估负载功率的动态变化和输出电压的调节精度。基于反步设计方法,设计了具有预设性能的复合非线性控制器,确保输出电压跟踪误差始终在预定义误差范围内。文章还对比了多种DC/DC转换器控制技术如脉冲调整技术、反馈线性化、滑模控制(SMC)、主动阻尼法和基于无源性的控制,并分析了它们的优缺点。最后,通过数值仿真验证了所提控制器的有效性和优越性。 适合人群:从事电力电子、自动控制领域研究的学者和工程师,以及对先进控制算法感兴趣的研究生及以上学历人员。 使用场景及目标:①适用于需要精确控制输出电压并处理恒功率负载的应用场景;②旨在实现快速稳定的电压跟踪,同时保证系统的鲁棒性和抗干扰能力;③为DC微电网中的功率转换系统提供兼顾瞬态性能和稳态精度的解决方案。 其他说明:文中不仅提供了详细的理论推导和算法实现,还通过Python代码演示了控制策略的具体实现过程,便于读者理解和实践。此外,文章还讨论了不同控制方法的特点和适用范围,为实际工程项目提供了有价值的参考。
内容概要:该论文介绍了一种名为偏振敏感强度衍射断层扫描(PS-IDT)的新型无参考三维偏振敏感计算成像技术。PS-IDT通过多角度圆偏振光照射样品,利用矢量多层光束传播模型(MSBP)和梯度下降算法迭代重建样品的三维各向异性分布。该技术无需干涉参考光或机械扫描,能够处理多重散射样品,并通过强度测量实现3D成像。文中展示了对马铃薯淀粉颗粒和缓步类动物等样品的成功成像实验,并提供了Python代码实现,包括系统初始化、前向传播、多层传播、重建算法以及数字体模验证等模块。 适用人群:具备一定光学成像和编程基础的研究人员,尤其是从事生物医学成像、材料科学成像领域的科研工作者。 使用场景及目标:①研究复杂散射样品(如生物组织、复合材料)的三维各向异性结构;②开发新型偏振敏感成像系统,提高成像分辨率和对比度;③验证和优化计算成像算法,应用于实际样品的高精度成像。 其他说明:PS-IDT技术相比传统偏振成像方法具有明显优势,如无需干涉装置、无需机械扫描、可处理多重散射等。然而,该技术也面临计算复杂度高、需要多角度数据采集等挑战。文中还提出了改进方向,如采用更高数值孔径(NA)物镜、引入深度学习超分辨率技术等,以进一步提升成像质量和效率。此外,文中提供的Python代码框架为研究人员提供了实用的工具,便于理解和应用该技术。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值