首页 > 其他分享 >P6577 【模板】二分图最大权完美匹配

P6577 【模板】二分图最大权完美匹配

时间:2022-12-11 20:23:31浏览次数:69  
标签:二分 pre slack int vis P6577 match inf 模板

P6577 【模板】二分图最大权完美匹配

#include <bits/stdc++.h>
using namespace std;
#define int long long
const int inf=1e18;
const int M=505;

int n,m;
int g[M][M];
bool vis[M];
int slack[M];
int match[M],pre[M];
int dx[M],dy[M];

void bfs(int x) {
    memset(vis,0,sizeof(vis));
    memset(pre,0,sizeof(pre));
    fill(slack,slack+n+1,inf);
    int y=0,num,id;
    match[y]=x;
    while(match[y]) {
        x=match[y];
        vis[y]=1;
        num=inf;
        for(int i=1;i<=n;i++) {
            if(vis[i])continue;
            if(slack[i]>dx[x]+dy[i]-g[x][i])
                slack[i]=dx[x]+dy[i]-g[x][i],pre[i]=y;
            if(slack[i]<num)num=slack[i],id=i;
        }
        for(int i=0;i<=n;i++) {
            if(vis[i])dx[match[i]]-=num,dy[i]+=num;
            else slack[i]-=num;
        }
        y=id;
    }
    while(y)match[y]=match[pre[y]],y=pre[y];
}

int km() {
    for(int i=1;i<=n;i++)bfs(i);
    int ans=0;
    for(int i=1;i<=n;i++)
        if(match[i])ans+=g[match[i]][i];
    return ans;
}

signed main() {
    cin>>n>>m;
    for(int i=1;i<=n;i++)
    for(int j=1;j<=n;j++)
        g[i][j]=-inf;
    while(m--) {
        int x,y,w;
        cin>>x>>y>>w;
        g[x][y]=max(g[x][y],w);
    }
    cout<<km()<<endl;
    for(int i=1;i<=n;i++)cout<<match[i]<<' ';
    return 0;
}

标签:二分,pre,slack,int,vis,P6577,match,inf,模板
From: https://www.cnblogs.com/basicecho/p/16974340.html

相关文章

  • Vue3忽略自定义模板组件提示
    为了在Vue应用程序中使用自定义元素库,必须修改应用程序以定义自定义元素和通知Vue编译器在编译过程中忽略哪些元素。根据同一页面,这可以通过修改Vue实例的配置来实......
  • 小程序模板与配置
    WXML模板语法WXSS模板样式全局配置页面配置网络数据请求 WXML模板语法数据绑定在data中定义数据在WXML中使用数据Mustache语法(双大......
  • 二分查找
    学习时间2022.12.11二分查找基本概念找到一篇文章二分查找详解,但是我没仔细看,先存在这里知识点补充qsort函数函数声明:voidqsort(void*base,size_tnitems,......
  • 算法总结-二分查找(两种模板方法总结)
    【二分查找】定义:二分查找也称折半查找(BinarySearch),是一种在有序数组中查找某一特定元素的搜索算法。我们可以从定义可知,运用二分搜索的前提是数组必须是有序的,这里需要......
  • P5410 【模板】扩展 KMP(Z 函数)
    题目链接P5410【模板】扩展KMP(Z函数)【模板】扩展KMP(Z函数)题目描述给定两个字符串\(a,b\),你要求出两个数组:\(b\)的\(z\)函数数组\(z\),即\(b\)与\(b\)的......
  • C++:类模板知识回顾
    概述类的私有、公有、类继承有时并不能满足我们的开发需求,尤其是将类作为容器(泛型编程)使用时,因此类模板在C++随之衍生。相关概念也会在下文中一一阐述~模板类的定义与使......
  • 模板链表类的扩展(QListEx<T>)
    以前写的链表都是比较简单的,插入节点是在头节点上,所以循环链表时都是从最后一个数据往前找的,给人的感觉是倒着的,今天写一个在链表尾部插入数据1。链表节点类的定义/链......
  • 我们常用于猜数字游戏的二分查找算法怎么用python实现呢?
    原理简单介绍类比猜数游戏我们上篇文章唠了唠经典的冒泡排序算法,如果说经典算法,那怎么少得了二分查找呢.可以说它是经典中的经典,就我们常用于猜数字方法.就是他.比如猜1......
  • flask配置文件、路由、模板语法与cbv
    web框架原理1..符合wsgi协议1.1使用wsgiref写fromwsgiref.simple_serverimportmake_serverdefmya(environ,start_response):print(environ)#environ是ht......
  • KM算法模板
    P3967[TJOI2014]匹配时间复杂度是n3#include<bits/stdc++.h>usingnamespacestd;usingpii=pair<int,int>;#definefifirst#definesesecondconstintM=105;......