计蒜客习题:距离序列(匈牙利算法)

该博客介绍了如何运用匈牙利算法解决计蒜客平台上的一个习题,即寻找满足特定条件的字典序最小的序列。通过构建二分图并从后向前匹配,实现了找到满足Qi = min{|Si-Ti|, N - |Si-Ti|}的Ti序列,从而确保字典序最小。" 85698127,7486429,数据预处理:探索数据可视化的有效方法,"['数据科学', '数据探索', '可视化技术', '数据预处理', '图形表示']
摘要由CSDN通过智能技术生成

计蒜客习题:距离序列(匈牙利算法)

题面:
在这里插入图片描述

已知序列长度N,序列Qi,Si,求满足Qi=min{ |Si-Ti|, N - |Si-Ti| }的字典序最小的Ti序列 (Ti是Si的一个排序);
按照二分图匹配的匈牙利算法的思想,把Si当作X集合,(Ti+N)当作Y集合;
遍历1~N将符合条件的边存放(若用链式前向星存边需要从大往小存(p[u]指向的是顶点最大的边));
在这里插入图片描述
在匹配时,如果从前向后匹配,会得到一个字典序最大的序列(这就是从大到小存边的原因);
所以匹配时从后向前匹配,这样靠后的Si就会匹配到最大的值,这样就可以得到字典序最小的序列。

AC代码:

#include <bits/stdc++.h>
using namespace std;
const int MAXN=(1e4+1)*2;
int p[MAXN],eid;
struct edge
{
   
    int v,next;
}e[MAXN*2];
void insert(int u,int v)
{
   
    e[eid].v=v;
    e[eid].next=p[u];
    p
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值