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

洛谷-P11942 [KTSC 2025] 重塑矩阵 题解

Solution

看到 \(01\) 矩阵,一个经典的转化是转化成二分图:建立 \(n\) 个行点 \(R_0 \sim R_{n-1}\)\(n\) 个列点 \(C_0 \sim C_{n-1}\)\(A_{i,j}\) 表示一条连接 \(R_i,C_j\) 的边。在此基础上可以想到两种建图方法:

Method 1

建无向图,\(A_{i,j}\) 作为边权。

不难发现原限制是 \(0/1\) 边各自的边导出子图为连通图的充分不必要条件。\(2n-1\) 条边恰好是一个生成树,但是发现生成树不好构造,我们就卡住了。

Method 2

建有向图,\(A_{i,j}\) 表示方向,转化成二分竞赛图:

  • \(A_{i,j}=1\):建边 \(R_i \to C_j\)
  • \(A_{i,j}=0\):建边 \(C_j \to R_i\)

那么原条件等价于原图中没有四元环。进一步地,可以归纳证明这样的二分图一定无环。即:二分竞赛图中,无四元环等价于整张图无环。

现在问题转化成了如何用 \(2n-1\) 条边表示这样一个有向无环二分图。我们只需要知道任意两点间的拓扑序大小关系。

注意到,若当前图中存在 \(k\) 个入度为 \(0\) 的点,在不取完这 \(k\) 个点之前,是不可能产生新的入度为 \(0\) 的点的。这样一层层剥掉入度为 \(0\) 的点,就将图分成了若干层。显然,同层内一定无边。那么我们只需要知道每个点所在的层。

显然,除第一层外,每个点必须有来自前一层的入边。对于每个点我们随便记录一条这样的边,会得到一个外向有向树森林,其中根为第一层的点,点在树中的深度就是它所在的层号。然后就做完了。

Code

#include "grid_encoding.h"
#include <vector>
#include <cstring>
#define rep(i,a,b) for(int i(a);i<b;++i)
#define rept(i,a,b) for(int i(a);i<=b;++i)
#define eb emplace_back
using namespace std;
namespace{const int N=1005;int n,in[N],d[N];vector<int> g[N],q;
}
void init(){memset(in,0,sizeof(in));memset(d,0,sizeof(d));rep(i,0,n*2) g[i].clear();q.clear(),q.reserve(n<<1);
}
void send(vector<vector<int>> A){n=A.size(),init();rep(i,0,n) rep(j,0,n){if(A[i][j]) g[i].eb(j+n),++in[j+n];else g[j+n].eb(i),++in[i];}rep(i,0,n*2) if(!in[i]) q.eb(i);while(!q.empty()){int u=q.back();q.pop_back();for(int v:g[u]){if(!--in[v]){q.eb(v);v>=n?select(u,v-n):select(v,u-n);}}}
}
vector<vector<int>> reconstruct(vector<vector<int>> B){n=B.size(),init();rep(i,0,n) rep(j,0,n){if(B[i][j]==1) g[i].eb(j+n),++in[j+n];else if(B[i][j]==0) g[j+n].eb(i),++in[i];}rep(i,0,n*2) if(!in[i]) q.eb(i);while(!q.empty()){int u=q.back();q.pop_back();for(int v:g[u]){if(!--in[v]){d[v]=d[u]+1;q.eb(v);}}}rep(i,0,n) rep(j,0,n){if(B[i][j]==-1) B[i][j]=d[i]<d[j+n];}return B;
}
http://www.gsyq.cn/news/1369675.html

相关文章:

  • Dubbo RPC通信实战
  • DeepSeek审计日志全链路解析:从日志采集、脱敏、存储到SOC对接的7步生产级落地手册
  • 泉州汽车音响调音 高端车改装天花板|众毅汽车音响,凭国家级技术硬实力稳居泉州第一 - 汽车音响改装
  • DeepSeek模型权重完整性校验失效?揭秘SHA-3+SGX远程证明双因子加固新范式
  • 如何为Claude Code配置Taotoken的Anthropic兼容通道与API密钥
  • MinIO集群敏感信息泄露漏洞CVE-2023-28432深度解析
  • 【DeepSeek身份认证集成实战指南】:20年专家亲授5大避坑要点与3步上线法
  • K-Medoids与OSRM融合:基于真实路网的两级设施选址优化实践
  • DeepSeek API访问控制配置全链路审计(含RBAC+ABAC双模型实测对比)
  • DeepSeek推理延迟骤降63%?揭秘LLM服务端3层缓存穿透+动态批处理调优全链路
  • Hermes Agent工具接入Taotoken的配置要点与注意事项
  • DeepSeek审计日志性能突降87%的真相:内核级日志缓冲区溢出漏洞(CVE-2024-DK-003)及热补丁部署指南
  • 对接焊缝的坡口形式
  • DeepSeek免费额度只剩23小时?紧急抢救指南:5分钟定位耗尽源+3行代码实现智能节流调度
  • 荧光法溶解氧仪厂家排行榜:2026国产十大优选品牌深度解析 - 仪表品牌排行榜
  • 2026 年 5 月合肥 GEO 优化公司可靠度深度评估:谁是企业值得托付的 AI 营销伙伴? - 行业深度观察C
  • 【实时更新 | 2026 年】国内可用的 npm 镜像源/加速器配置大全(附测速方法)
  • 5步掌握LyricsX:macOS平台歌词同步的终极解决方案
  • 2026年西安本地防水维修行业综合实力分析与头部服务机构全景梳理 苏州防水补漏维修公司靠谱品牌排名 - 冠盾建筑修缮
  • 2026 重庆黄金首饰回收实力横评:添价收定价标准贴合市场主流 - 薛定谔的梨花猫
  • 3步掌握BilibiliDown:B站视频下载的完整解决方案
  • 初创团队如何利用Taotoken的Token Plan套餐优化AI应用开发成本
  • Xournal++:跨平台手写笔记与PDF批注的实用解决方案
  • 2026年小学生练字正姿APP避坑指南:这5款练字软件深度横评 - 品牌报告
  • AI动态简报之算力基建篇(2026.05.24)
  • 终极暗黑破坏神2存档编辑器:轻松修改单机角色的完整指南
  • 湘潭GEO公司口碑排行,2026避坑注意事项全分享 - 资讯纵览
  • 泉州汽车音响改装综合实力 NO.1|众毅汽车音响:十二项权威认证加持,定义闽南音响改装新标杆 - 汽车音响改装
  • SSM+Vue建筑工程项目管理系统源码+论文
  • 深圳华为云代理大宇云 优质华为云合作伙伴助力企业解锁上云优惠 - 资讯纵览