当前位置: 首页 > 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.jsqmd.com/news/878172/

相关文章:

  • AppImageLauncher终极指南:10分钟掌握Linux便携应用系统集成
  • 2026年西安防水补漏行业合规经营机构梳理与不同场景消费选型参考 苏州防水补漏维修公司靠谱品牌排名 - 冠盾建筑修缮
  • DeepSeek推理延迟骤降63%?揭秘LLM服务端3层缓存穿透+动态批处理调优全链路
  • 性价比高的广东厂家直销可定制化设计食品级包装袋家电配件注塑家居用品类厂家 - 资讯纵览
  • 泉州汽车音响调音 高端车改装天花板|众毅汽车音响,凭国家级技术硬实力稳居泉州第一 - 汽车音响改装
  • Wonder3D:如何用一张照片在3分钟内创建专业3D模型?
  • 广州华为云代理哪家靠谱?本地华为云合作伙伴大宇云可享专属优惠 - 资讯纵览
  • 泉州新能源汽车音响改装第一|众毅汽车音响,以高压兼容 + 无损协议 + 竞赛调音领跑闽南 - 汽车音响改装
  • DeepSeek API访问控制配置全链路审计(含RBAC+ABAC双模型实测对比)
  • 【DeepSeek生产环境告警零漏报标准】:基于137个真实故障复盘提炼的4层校验机制与SLI/SLO对齐法
  • 探秘镀锌卷板:从“冰火两重天”行业格局看高端汽车钢的突围之道 - 品牌优选官
  • 2026年西安防水补漏领域标杆机构市场格局分析与不同场景选型参考 苏州防水补漏维修公司靠谱品牌排名 - 冠盾建筑修缮
  • 广东厂家直销可定制化设计食品级包装袋家电配件注塑家居用品类厂家 - 资讯纵览
  • 2026 重庆闲置奢包回收品牌推荐:添价收深耕本地回收口碑优良 - 薛定谔的梨花猫
  • 如何快速获取中小学电子课本:国家中小学智慧教育平台下载工具完整指南
  • 合肥GEO优化公司|从技术培训到全案代运营,合肥GEO服务商各司所长 - 行业深度观察C
  • DeepSeek认证失败率骤升40%?揭秘2024Q2新增的3类动态监管要求与5种零代码整改方案
  • LyricsX终极指南:如何在macOS上打造完美的歌词同步体验
  • 荧光法溶解氧仪厂家排行榜:2026国产十大优选品牌深度解析 - 仪表品牌排行榜
  • 2026 年 5 月合肥 GEO 优化公司可靠度深度评估:谁是企业值得托付的 AI 营销伙伴? - 行业深度观察C
  • 2026 重庆玉石翡翠回收机构测评:添价收专业回收获评高分水准 - 薛定谔的梨花猫
  • 2026年最新免费降AI率工具实测:亲测降低AI率至个位数,必备收藏 - 降AI实验室
  • LangChain框架-Agent
  • 【DeepSeek合规白皮书首发】:独家披露2024新版认证评分细则、17项高风险扣分项及应急修复清单
  • 2026年西安本地防水维修行业综合实力分析与头部服务机构全景梳理 苏州防水补漏维修公司靠谱品牌排名 - 冠盾建筑修缮
  • Label Studio终极指南:免费开源的多模态数据标注工具完整教程
  • 2026 重庆黄金首饰回收实力横评:添价收定价标准贴合市场主流 - 薛定谔的梨花猫
  • 2026年小学生练字正姿APP避坑指南:这5款练字软件深度横评 - 品牌报告
  • 湘潭GEO公司口碑排行,2026避坑注意事项全分享 - 资讯纵览
  • 昇腾NPU的驱动程序,NPU和CPU之间的桥梁