首页 > 编程语言 >Stoer-Wagner 算法

Stoer-Wagner 算法

时间:2023-05-02 16:24:44浏览次数:48  
标签:Stoer int 610 Wagner 最小 vis 算法 include mx

刚才可能是有用算法。这次是无用算法。

无向图的最小割是最小的边集使得割掉后不连通。Stoer-Wagner 算法可以在 \(O(n^3)\) 复杂度内解决无向图最小割。或者说实际上是 \(O(nm\log m)\)。

首先有一句废话:对于任意两点 \(s,t\) ,割掉最小割后,或者处于一个连通块,或者处于不同的两个连通块。

那么考虑如何处理这两种。对于同一连通块的情况,显然可以把 \(s,t\) 缩成一个点,然后把所有连出去的边的边权变成连到两个点的边权和。于是我们只要求 \(n-1\) 次两点间的最小割,每处理一次缩一个点。

于是考虑如何处理 \(s,t\) 间的最小割。显然不是网络流。

构造过程是这样的:设 \(w_i\) 为点 \(i\) 连出去的所有边的边权和。构造一个集合 \(A\) 初始为空,每次选 \(w_i\) 最大的一个加入 \(A\) 中,那么最后加入的两个点的最小割就是最后加入的点的权值。懒得证明。

#include <cstdio>
#include <algorithm>
#include <iostream>
#include <cstring>
#include <vector>
#include <queue>
using namespace std;
int n,m,S,T,a[610][610],w[610],ord[610];
bool vis[610],v[610];
int solve(int x){
    memset(w,0,sizeof(w));
    memset(vis,0,sizeof(vis));
    w[0]=-1;
    for(int i=1;i<=n-x+1;i++){
        int mx=0;
        for(int j=1;j<=n;j++){
            if(!v[j]&&!vis[j]&&w[j]>w[mx])mx=j;
        }
        vis[mx]=true;ord[i]=mx;
        for(int j=1;j<=n;j++){
            if(!v[j]&&!vis[j])w[j]+=a[mx][j];
        }
    }
    S=ord[n-x],T=ord[n-x+1];
    return w[T];
}
int sw(){
    int ans=0x3f3f3f3f;
    for(int i=1;i<n;i++){
        ans=min(ans,solve(i));
        v[T]=1;
        for(int j=1;j<=n;j++){
            a[S][j]+=a[T][j];a[j][S]+=a[j][T];
        }
    }
    return ans;
}
int main(){
    scanf("%d%d",&n,&m);
    for(int i=1;i<=m;i++){
        int u,v,w;scanf("%d%d%d",&u,&v,&w);
        a[u][v]+=w;a[v][u]+=w;
    }
    printf("%d\n",sw());
    return 0;
}

标签:Stoer,int,610,Wagner,最小,vis,算法,include,mx
From: https://www.cnblogs.com/gtm1514/p/17367823.html

相关文章

  • 06 ETH-挖矿算法
    《区块链技术与应用》课程链接:https://www.bilibili.com/video/BV1Vt411X7JF/?spm_id_from=333.337.search-card.all.click06ETH-挖矿算法目录06ETH-挖矿算法挖矿是保障区块链安全的一个重要手段。Blockchainissecuredbymining.bugbounty(悬赏找漏洞)比特币的挖矿算......
  • 项目实践:我在嵌入式控制上对PID算法的理解
    关于PID算法的碎碎念(我也不知道咋说明)。笔者:czg-bky全文:我在嵌入式控制上对PID算法的理解-czg-bky-博客园(cnblogs.com)......
  • 6 年大厂面试官,谈谈我对算法岗面试的一些看法
    文|不敢透露姓名的Severus和小轶面试官坐在那撇着大嘴的,“咳,给你一机会,最短的时间内让我记住你。”这个我会,我抡圆了“啪!”,扭头我就走。我刚到家,录取通知书就来了,请你务必马上来一趟。——出自郭德纲的相声大家好,我是Severus,一个在某厂做中文文本理解的程序员。同时,也感谢小轶......
  • 分别使用SAD匹配,NCC匹配,SSD匹配三种算法提取双目图像的深度信息
    1.算法仿真效果matlab2022a仿真结果如下:     2.算法涉及理论知识概要       深度学习的蓬勃发展得益于大规模有标注的数据驱动,有监督学习(supervisedlearning)推动深度模型向着性能越来越高的方向发展。但是,大量的标注数据往往需要付出巨大的人力成本,越来......
  • 最近公共祖先 Tarjan算法
    例题:洛谷P3379【模板】最近公共祖先(LCA)https://www.luogu.com.cn/problem/P3379tarjan算法是利用了并查集来求LCA的,时间复杂度比倍增低,是O(n+m)#include<iostream>#include<vector>#include<utility>#defineforup(i,l,r)for(inti=l;i<=r;i++)#definefordown(i,l,r)fo......
  • 算法3:质数的个数
    一、质数的定义质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。二、判断质数的方法1for(intj=2;j<i;j++){2if(i%j==0)3break;4if(i==j)5cout<<i<<"";6}三、完整代码1#include<bits/stdc......
  • 推荐算法的知识框架【更新中】
    几年前刚进入行业时,就简单认为不过是wide&deep做精排,双塔FM做召回做粗排,再加上一些周边项目,比如冷启动和多模型融合调参,就组成了一个完整的推荐系统算法部分。再回头思考这一切,不再迷失在各式各样的实现细节中,关注本质,有了更广泛的认识,分为一下几个部分。1.建模方法多阶段的推......
  • 整理一些学过的数据结构和算法
    匆匆忙忙中学了很多算法,但基本都是打个板子就跑路了,有些算法有个人比较深入和独特的见解,但大部分,只是实现例题的需求,对算法的作用似懂非懂,所以写篇博客整理一下。无旋平衡树(treap)高级数据结构:树和堆可以允许的操作:插入,删除,查询某数排名,查询某排名的树(第K大),求某数的前驱,后驱(X......
  • 数据有偏差,照样能学对!20年前就有这么强的算法了?
    文|白鹡鸰给小铁比了个心编|小轶背景“每个人都依赖自己的知识和认知,同时又为之束缚,还将此称为现实;但知识和认识是非常暧昧的东西,现实也许不过是镜花水月——人们都是活在偏见之中的,你不这样认为吗?这双眼睛,又能看多远呢?”机器学习,作为模仿人类思维方法进行建模的过程,虽然从数......
  • 【字节二面算法】NO662 二叉树最大宽度
    [字节二面算法]662.二叉树最大宽度给你一棵二叉树的根节点root,返回树的最大宽度。树的最大宽度是所有层中最大的宽度。每一层的宽度被定义为该层最左和最右的非空节点(即,两个端点)之间的长度。将这个二叉树视作与满二叉树结构相同,两端点间会出现一些延伸到这一层的n......