【KM算法求最大权匹配】hdu 3722

KM算法(DFS版,优化DFS版,BFS版) KM算法主要用于二分图的最大权匹配问题 图解 模板 如果我们要求边权值最小的匹配可以把边权值取负值,得出结果后再取相反数即为答案。 KM算法各版本模板: dfs版KM算法模板O(n4)复杂度 图解+模板 题集 对访问过且匹配过的男生,期望值要加上女生减去的期望值;代码中的未访问过的男生实际上包含两种,一种是完全没被访问过的(slack[ j ] = INF),一种是访问过,且更新过slack值但没有参与匹配的男生,由于这种男生可匹配的部分女生期望值降低,所以该男生的slack值减少。 HDU 2255 模板 阅读详情

貌似TLE了10来次吧。。。不记得改哪里咯,大概都是些初始化问题!

#include <list>
#include <map>
#include <set>
#include <queue>
#include <string>
#include <deque>
#include <stack>
#include <algorithm>
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <limits.h>
#include <time.h>
#include <string.h>
using namespace std;

#define LL long long
#define PI acos(-1.0)
#define Max INT_MAX
#define Min INT_MIN
#define eps 1e-8
#define FRE freopen("a.txt","r",stdin)
#define N 203
//最大权匹配KM算法
//int max(int a,int b){return a>b?a:b;}
int w[N][N];
bool vx[N],vy[N];
int slack;
int lx[N],ly[N];
int mat[N];
char str[203][1003];
int  n;
bool Path(int s){//找增广路
    int tmp;
    vx[s]=1;
    int i,j;
    for(i=0;i<n;i++){
        if(vy[i])continue;
        tmp=lx[s]+ly[i]-w[s][i];
        if(tmp==0){
            vy[i]=1;
            if(mat[i]==-1 || Path(mat[i])){
                mat[i]=s;
                return true;
            }
        }
        else
        if(slack>tmp)
        slack=tmp;
    }
    return false;
}
void KM(){
    int i,j;
    //(1)初始化可行顶标的值;
    memset(ly,0,sizeof(ly));
    memset(mat,-1,sizeof(mat));
    for(i=0;i<n;i++){
        lx[i]=Min;
        for(j=0;j<n;j++){
           if(lx[i]<w[i][j])lx[i]=w[i][j];
        }
    }
    //(2)用匈牙利算法寻找完备匹配;
    for(i=0;i<n;i++){
        while(1){
        for(j=0;j<=n;j++)
        vx[j]=vy[j]=0;
        slack=Max;
        //(4)重复(2)(3)直到找到相等子图的完备匹配为止;
        if(Path(i))break;
        //(3)若未找到完备匹配则修改可行顶标的值;
        for(j=0;j<n;j++){
            if(vx[j])
            lx[j]-=slack;
            if(vy[j])
            ly[j]+=slack;
            }
        }
    }
    int ans=0;
    for(i=0;i<n;i++){
        ans += w[mat[i]][i];
    }
    printf("%d\n",ans);
}
int main(){
    while(scanf("%d",&n)!=EOF){
        int i,j;
        for(i=0;i<n;i++)
        scanf("%s",str[i]);
        memset(w,0,sizeof(w));//
        for(i=0;i<n;i++){
            for(j=0;j<n;j++){
                if(i==j){continue;}
                int s1=strlen(str[i])-1;
                int s2=0;
                int cnt=0;
                int len=strlen(str[j]);
                while(s1>=0 && s2<len){//求相同前缀!
                    if(str[i][s1] == str[j][s2])
                    {
                        cnt++;
                        s1--;
                        s2++;
                    }
                    else
                    break;
                }
                w[i][j]=cnt;
            }
        }
        KM();
    }
    return 0;
}


[多智能体强化学习] 王树森YouTube课程笔记 前言 近期在设计V2X资源分配任务下的状态空间和动作空间,可以说是一筹莫展,是自己菜,现在看来可能也是涉及到一些关于多智能体强化学习实现过程中过于细节的点,目前的知识储备还不够。因此打算用半周到一周的时间重电,希望之后能有进展。 本文内容来自于友人LX所推荐的油管教程,链接如下:多智能体强化学习,一共两节课40min左右。教程废话不多干货不少,老师的声音还好听,推荐直接去看原教程。 这里还要多一嘴,那就是对于强化学习来说,单主体和多主体的界限,在某种程度上来说是很模糊的,并不是场景中有多个主体需要.. 阅读详情

相关推荐

FPGA调试利器:VIO与ILA在Vivado中的实战应用指南

本文详细介绍了Vivado中FPGA调试工具VIO与ILA的实战应用技巧。VIO作为虚拟输入/输出工具,可实时调整参数;ILA作为集成逻辑分析仪,能高效捕获内部信号。文章通过具体案例展示了如何配置ILA采样深度、触发条件,以及VIO的动态参数调整功能,帮助开发者提升上板调试效率,解决常见通信失败、数据不同步等问题。

weixin_42553471的博客 424

HDU 2255 奔小康赚大钱(KM算法)

Problem Description 传说在遥远的地方有一个非常富裕的村落,有一天,村长决定进行制度改革:重新分配房子。 这可是一件大事,关系到人民的住房问题啊。村里共有n间房间,刚好有n家老百姓,考虑到每家都要有房住(如果有老百姓没房子住的话,容易引起不安定因素),每家必须分配到一间房子且只能得到一间房子。 另一方面,村长和另外的村领导希望得到最大的效益,这样村里的机构才...

←_← 298

二手分析仪器改造实战:如何用PMT搭建荧光检测电路(附完整电路图)

本文详细介绍了如何利用二手分析仪器中的光电倍增管(PMT)核心部件,进行荧光检测电路的实战改造。内容涵盖从PMT工作原理理解、高压供电电路设计、低噪声前置放大(跨阻放大器)到信号调理的完整流程,并提供了关键电路图与调试排错指南,旨在帮助电子爱好者与工程师低成本构建稳定、高灵敏度的专业检测系统。

weixin_29234239的博客 441

hdu 2255 奔小康赚大钱(我的第一个KM匹配)

奔小康赚大钱 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 798    Accepted Submission(s): 362Problem Description 传说在遥远的地方有一个非常富裕的村落,有一天,村长决定进行制度...

iteye_4729的博客 523

题解:AcWing 6051 看病

等知名刷题平台精心挑选而来,并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构,旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。但医院的排队不同其他排队,因为多数情况下,需要病情严重的人优先看病,所以希望BSNY设计系统时,以病情的严重情况作为优先级,判断接下来谁可以去看病。具体是这样的,最近来医院看病的人越来越多了,因此很多人要排队,只有当空闲时放一批病人看病。的操作,输出此时还在排队人中,优先级最大的患者姓名和优先级。后面没有输入,但需要你输出。

团爸讲算法 589

NVIDIA Isaac GR00T N1 入门教程(一) 人形机器人多模态大语言模型

英伟达™ Isaac GR00T N1 是世界上首个用于通用仿人机器人推理和技能的开放式基础模型。该跨体模型采用多模态输入(包括语言和图像)在不同环境中执行操作任务。GR00T N1 在一个庞大的仿人机器人数据集上进行训练,该数据集包括真实捕获数据、使用英伟达 Isaac GR00T Blueprint 组件生成的合成数据(神经生成轨迹示例)以及互联网规模的视频数据。通过后期训练,它可以适应特定的应用、任务和环境。

2506_90492529的博客 3049

二分图最佳匹配(KM算法)学习笔记

KM算法 学习这个之前先要了解几种二分图匹配的区别,这里就不说了,可以看看这篇博客 博客 先上道模板题:HDU 2255 奔小康赚大钱 传说在遥远的地方有一个非常富裕的村落,有一天,村长决定进行制度改革:重新分配房子。 这可是一件大事,关系到人民的住房问题啊。村里共有n间房间,刚好有n家老百姓,考虑到每家都要有房住(如果有老百姓没房子住的话,容易引起不安定因素),每家必须分配到一间房子且只能得到...

不知所云的博客 1035

第二天 原来Labview语言结构也挺自然(2.1 顺序结构)

新建项目文件StructureTest.lvproj,新建四个子VI(FlatSequence.vi、CaseStructure.vi、LoopStructure.vi、EventStructure.vi),具体新建流程可以参考1.2节。

weixin_38637405的博客 1004

带权二分匹配——KM算法

上一篇中,我们讲到如果不带有权值,单纯寻找最大匹配数的话,匈牙利算法完全可以满足,可是,许多问题中,通过带权值我们可以找到最大或者最小化策略,这样的问题,我们就要用到KM算法。先贴一道模板题: 奔小康赚大钱 传说在遥远的地方有一个非常富裕的村落,有一天,村长决定进行制度改革:重新分配房子。 这可是一件大事,关系到人民的住房问题啊。村里共有n间房间,刚好有n家老百姓,考虑到每家都要有房住(如

Maybemust的博客 867

Trae 在代码审查场景的 3 大差异化能力:对比 Claude Code、Cursor 与 Codex 实测

揭示代码审查的核心矛盾是上下文断层而非找 Bug,介绍 Trae 通过跨文件符号追踪、意图-实现对齐校验、增量变更影响图谱生成三件事实现上下文校准,并对比其与 Claude Code、Cursor、Codex 在多模块 Java 项目中的实际审查差异

weixin_42525482的博客 152

有限元ABAQUS软件安装后管理员身份运行报错:Cannot connect to license server system...如何解决?

🏆本文收录于 《全栈Bug调优(实战版)》 专栏,该专栏专注于分享我在真实项目开发中遇到的各类疑难Bug及其深层成因,并系统提供高效、可复现的解决思路和实操方案。无论你是刚入行的新手开发者,还是拥有多年项目经验的资深工程师,本专栏都将为你提供一条系统化、高质量的问题排查与优化路径,助力你加速成长,攻克技术壁垒,迈向技术价值最大化与职业发展的更高峰🚀!

**My Coding Family** 2075

hdu 2255 奔小康赚大钱 (二分图最优匹配,KM算法)

Description 传说在遥远的地方有一个非常富裕的村落,有一天,村长决定进行制度改革:重新分配房子。 这可是一件大事,关系到人民的住房问题啊。村里共有n间房间,刚好有n家老百姓,考虑到每家都要有房住(如果有老百姓没房子住的话,容易引起不安定因素),每家必须分配到一间房子且只能得到一间房子。 另一方面,村长和另外的村领导希望得到最大的效益,这样村里的机构才会有钱...

bandiaodai5734的博客 178

【算能】TPU(张量处理单元)的深度解析

算能(SOPHGO)作为国产AI芯片领域的核心企业,其TPU(张量处理单元)以高能效比与全场景覆盖能力为核心竞争力,专注于边缘计算与行业垂直领域的AI推理加速。

浩瀚之水的专栏 1548

hdu 3722 Card Game 求完全图中l个不相交的环的最大权和=最优匹配 KM算法

Problem Description Jimmy invents an interesting card game. There are N cards, each of which contains a string Si. Jimmy wants to stick the

kongming_acm的专栏 727

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

HDU3722 Card Game KM算法的二分图带权匹配

Problem Address:http://acm.hdu.edu.cn/showproblem.php?pid=3722 【前言】 又搜刮来了一份代码。 用于求二分图的带权匹配。 记得以前看到过这道题,不够没什么思路。 昨天也是。 于是今天学了KM

Human_CK的专栏 776

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

hdu 3722Card Game(KM匹配求环)

//求图中环的最大权 //直接拆点,求二分图的最大权匹配。 #include #include #include using namespace std; #define clr(a) memset(a,0,sizeof(a)); const int N=300; const int INF=0x3fffffff; char dic[204][1024]; int score[204][204];

野生的TFgirl 448

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

KM算法及其应用

  在二分图匹配中有最大匹配问题,使用匈牙利算法或者网络流相关算法解决,如果给每条边增加一个权值,求权值和最大的匹配方案就叫做最大权匹配问题。其实之前所说的最大匹配就是权值为1的最大权匹配。   求最大权完备匹配常用的方法是Kuhn-Munkres算法(简称KM算法),其主要思想就是通过顶标将求最大权匹配问题转化为求解最大匹配问题。算法的大致思路是任意构造一个可行顶标(比如Y结点顶标为...

aisebu7819的博客 480

HDU--3722(二分图最大权匹配)

2015-06-0920:08:01 题目:给出N个单词,然后任意两个单词之间的边权为第一个单词的倒序和第二个单词的最大公共前缀长度。(连向自己的边的边权定为0)。   你要挑选若干边,让所有单词形成若干个环,使得总边权和最大。 思路:比较裸的最大权匹配问题,但是没有学过KM还是比较生疏。    直接根据单词间的关系建立了邻接矩阵,然后跑KM即可。 #include &l...

dingdi3021的博客 232

HDU 3722 Card Game(KM算法)

一开始数组开小了,T了很久,后来发现自回路的时候忘记加continue,又WA了很久,这水题浪费这么多时间= =。#include #include using namespace std; const int maxn=200+5; int w[maxn][maxn],n,m; int lx[maxn],ly[maxn]; int Left[maxn]; bool s[maxn],t[maxn]

qq_33901573的博客 309

hdu3722 Card Game (KM)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3722 题解:将字符串分成X和Y集合(每个集合都是这n个节点),对于i和j这两个节点,他们的权值weight[i][j]就是将字符串s[i]拼接在字符串s[j]后面所得的值,这样建立起带权值的二分图之后,然后就是利用KM算法求解该二分图的最大权匹配. #include

不可不戒 709

HDU - Card Game(KM)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3722Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Problem Description Jimmy invents an interesting card game. The...

ityanger的技术栈 2748

HDU 3722 最大效益圈覆盖

题意:给你n个字符串,任意两个字符串可以对接

【洛风城】 575

hdu3722Card Game KM算法

//n个字符串,对于一个字符串i,j 将i颠倒后与j的公共前缀的大小为i,j的权值 //问将这些字符串拼接起来得到的最大权值 //将这些字符串之间建图,直接求完备匹配的最大权匹配 #include<cstdio> #include<cstring> #include<iostream> using namespace std ; const int maxn = 210 ; const int in

ijbuhv的专栏 789

HDU 3722 Card Game 【KM】

Jimmy invents an interesting card game. There are N cards, each of which contains a string Si. Jimmy wants to stick them into several circles, and each card belongs to one circle exactly. When stick...

loving coding 448

HDU 3722 KM模板题

/**************************************************************************************************** KM模板题,无非是看不看得出来罢了~ ***************************************************************************

源码力量 779

HDU 3722 Card Game(KM最大匹配)

这题就是一道KM算法的模版题,下午做比赛的时候两个模版都是TLE,好不科学,比赛结束后去杭电交就成WA了,更不科学……后来发现是建图的时候写挫了T_T,要不比赛的时候就能多出一题了,还有一道匹配题也没敢写,一会就去写一下。话说根本不知道KM的实现啊,只知道抄模版,感觉自己好挫啊…… #include #include #include using namespace std; #defin

z451538473的专栏 603
上一篇: 【trie树】hdu 3724
下一篇: 【Floyd算法】hdu 2868
leolin_
博客等级 码龄16年 96粉丝 411原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值