题解:P16443 [XJTUPC 2026] 矩阵拆分
Nuclear_Fish_cyq · · 题解
首先显然
接下来对于其他的
- 如果
B_{i,j} 是偶数那么A_{i,j}=A_{j,i}=\frac{B_{i,j}}{2} 。 - 如果
B_{i,j} 是奇数那么我们需要给多余的一个1 分配到A_{i,j} 与A_{j,i} 中的一个上。这时候我们考虑其他限制,那么这个问题变成了:
有一些点,你需要黑白染色,且保证每一列黑白点数量差不超过
然后这题是 CF547D,具体做法是:
我们考虑把点建模成边,然后用度数来建模性质。更具体地,给每一行每一列都建一个点,如果有点
建模部分:
for(int i = 1; i <= n; i++){
for(int j = 1; j < i; j++){
if(b[i][j] % 2){
add(i, j + n);
deg[i]++;
deg[j + n]++;
}
}
}
for(int i = 1; i <= 2 * n; i++){
if(deg[i] % 2){
add(0, i);
}
}
redirect();