当前位置: 首页 > news >正文

20260120 省选模拟赛

20260120 省选模拟赛

https://htoj.com.cn/cpp/oj/contest/detail?cid=22635323962240

Problem B. 白点黑点

对于度数序列,求出它能构造出的最大匹配有哪些。

最大匹配考虑 Hall 定理。对于一个集合 \(S\),其 \(|N(S)|\) 最小取 \(1\),最大取 \(\min(\sum_{x\in S} d_x,n)\)。从 \(1\) 开始,可以通过调整一条边使得 \(|N(S)|\) 增加 \(1\)这启发我们,最大匹配的取值可能是连续的。

结论:若构造出来的最小、最大的最大匹配分别为 \(l,r\),那么 \([l,r]\) 内的所有最大匹配都能构造出来。

\(l=r\) 显然成立。

\(l<r\),那么把最大匹配为 \(l\) 的连边方案拿出来,一定存在一个左部未匹配点 \(x\) 连向右部匹配点 \(u\),一个右部未匹配点 \(y\) 连向左部匹配点 \(v\),否则不可能有比 \(l\) 更大的最大匹配。断掉 \((x,u),(y,v)\),连接 \((u,v),(x,y)\),最大匹配增加 \(1\),而度数不变。

不难构造得出,设左部、右部度数非 \(0\) 点个数分别为 \(i,j\)那么 \(r=\min(i,j)\)

但是 \(l\) 不好求。放宽限制,我们钦定一个集合 \(S\),那么最大匹配一定 \(\le n-(|S|-|N(S)|)\)一定存在一个 \(S\) 让最大匹配达到 \(l\) 的下界

把钦定 \(S\)、确定度数的过程放到 dp 中解决。设 \(f(i,j,s,x,y)\) 为考虑前 \(i\) 个左部点,有 \(j\) 个度数非 \(0\) 点,\(|S|=s\)\(S\) 度数和为 \(x\),总度数和为 \(y\) 的最小代价,总复杂度 \(O(n^6)\)。右部点一样做,然后合并即可。

Note:Hall 定理使用不熟练。

int n,m;
int a[N][N],b[N][N];
ll f[N][N][N][N][N],g[N][N][N][N][N];
ll ans[N];signed main(){read(n),read(m);for(int i=1;i<=n;i++){for(int j=0;j<=m;j++)read(a[i][j]);}for(int i=1;i<=n;i++){for(int j=0;j<=m;j++)read(b[i][j]);}memset(ans,0x3f,sizeof(ans));memset(f,0x3f,sizeof(f));memset(g,0x3f,sizeof(g));f[0][0][0][0][0]=g[0][0][0][0][0]=0;for(int i=1;i<=n;i++)for(int j=0;j<=i-1;j++)for(int s=0;s<=i-1;s++)for(int x=0;x<=m;x++)for(int y=x;y<=m;y++)for(int d=0;y+d<=m;d++){Ckmin(f[i][j+(d>0)][s+1][x+d][y+d],f[i-1][j][s][x][y]+a[i][d]);Ckmin(f[i][j+(d>0)][s][x][y+d],f[i-1][j][s][x][y]+a[i][d]);Ckmin(g[i][j+(d>0)][s+1][x+d][y+d],g[i-1][j][s][x][y]+b[i][d]);Ckmin(g[i][j+(d>0)][s][x][y+d],g[i-1][j][s][x][y]+b[i][d]);} for(int i=0;i<=n;i++){for(int j=0;j<=n;j++){int R=min(i,j); for(int s=0;s<=n;s++){ll mn=LINF;for(int t=0;t<=s;t++){int L=n-s+t;if(L>R) continue;for(int x=0;x<=m;x++){for(int y=x;y<=m;y++)Ckmin(mn,f[n][i][s][x][m]+g[n][j][t][y][m]);}Ckmin(ans[L],mn);}}}}for(int i=0;i<=n;i++){if(ans[i]<1e18) printf("%lld ",ans[i]);else printf("no ");}puts("");
}
http://www.jsqmd.com/news/275119/

相关文章:

  • 大数据领域列式存储:加速数据查询的利器
  • 国内网络环境下 MiniConda + Jupyter + ChromaDB 安装教程
  • JavaScript对象深浅拷贝及解析
  • sfda
  • [豪の算法奇妙冒险] 代码随想录算法训练营第三十四天 | 62-不同路径、63-不同路径Ⅱ
  • 大数据毕设项目:基于django的电子产品电商平台主数据管理系统(源码+文档,讲解、调试运行,定制等)
  • microblaze是怎么通过把数据通过axi总线给到ip的
  • C++课后习题训练记录Day71
  • 【Android 美颜相机】第十天:YUV420SP和RGB
  • fpga 低频模块和高频模块之间单脉冲信号传输 verilog
  • CAD一键批量标注线长度——CAD c#二次开发
  • 【Android 美颜相机】第十一天:GPUImageFilter解析
  • 换根 DP 简介
  • 【毕业设计】基于机器学习的网络购物平台的智能推荐(源码+文档+远程调试,全bao定制等)
  • 强烈安利8个AI论文软件,本科生搞定毕业论文!
  • 强烈安利8个AI论文软件,本科生搞定毕业论文!
  • 第 470 场周赛Q2——3702. 按位异或非零的最长子序列
  • 文字标注旋转角度设置(防止文字倒立)
  • 储能辅助电力系统调峰的容量需求研究 Matlab代码
  • 咋的,寒假 1 个月学门黑客技术,难道很难吗?
  • 储能辅助电力系统调峰的容量需求研究 Matlab代码
  • 【Matlab】 CRC-8 计算数组Checknum
  • 拒绝“数据搬运工”:PostgreSQL 存储过程与函数实战指南
  • 2026年评价高的镀锌桥架,模压桥架,北方电缆桥架厂家行业优质推荐 - 品牌鉴赏师
  • 吐血推荐!本科生AI论文平台TOP10:开题报告文献综述全搞定
  • 开源版 Claude Code 杀疯了,怒斩 70k+ Star!!
  • 大数据毕设选题推荐:基于django的菜价可视化系统蔬菜销售分析与预测可视化系统【附源码、mysql、文档、调试+代码讲解+全bao等】
  • UVM-build_phase/run_phase的执行顺序及仿真调度
  • AL_ControlRes代码中文注释
  • Jetbrains全家桶自动破解