传送门
谜一样的思路:首先有一个结论,就是最多涂n+m−1n+m-1n+m−1次。
于是枚举哪一行或者哪一列没有被涂。以某一行没有涂为例:
这一行的每一个位置上的颜色即为对应列涂的颜色。根据覆盖关系判断一下涂色的先后顺序,先涂的向后涂的连一条边。然后拓扑排序看是否有环。若有环则是无解的。否则更新答案即可。

#include<bits/stdc++.h>
using namespace std;
const int maxn=120,oo=1e9;
int n,m,c,col[maxn][maxn],paint[maxn],in[maxn],ban[maxn];
vector<int> G[maxn];int Q[maxn],top=0;
int l[maxn],cl[maxn],cnt=0;
inline int read(){int x=0;char ch=getchar();while(!isdigit(ch)) ch=getchar();while(isdigit(ch)) x=x*10+ch-'0',ch=getchar();return x;
}
inline int topsort(){top=0;for(int i=1;i<=n+m;++i) if(!in[i]) Q[++top]=i;for(int i=1;i<=top;++i){for(int j=0,u=Q[i];j<G[u].size();++j)if(!--in[G[u][j]]) Q[++top]=G[u][j];}return top==n+m;
}
int ans=oo;
inline void update(){if(!topsort()) return;cnt=0;for(int i=1;i<=n+m;++i) if(paint[i]&&paint[i]!=-1) ++cnt;if(cnt>=ans) return;cnt=0;for(int i=1;i<=top;++i) if(paint[Q[i]]&&paint[Q[i]]!=-1)l[++cnt]=Q[i],cl[cnt]=paint[Q[i]];ans=cnt;
}
inline void out(int i){if(l[i]<=n) printf("R %d %d\n",l[i],cl[i]);else printf("C %d %d\n",l[i]-n,cl[i]);
}
inline void check(int u){for(int i=1;i<=n+m;++i) G[i].clear(),paint[i]=-1,in[i]=0;if(u<=n){//row[u] is emptyfor(int j=n+1;j<=n+m;++j) paint[j]=col[u][j];for(int i=1;i<=n;++i) if(i!=u){for(int j=n+1;j<=n+m;++j){ if(col[i][j]!=paint[j]){ if(!col[i][j]||(paint[i]!=-1&&paint[i]!=col[i][j])) return;paint[i]=col[i][j],G[j].push_back(i),in[i]++;} if(col[i][j]==paint[j]&&paint[i]!=paint[j])G[i].push_back(j),in[j]++;} }for(int i=1;i<=n+m;++i) if(ban[i]&&paint[i]!=-1&&paint[i]!=0) return;}else{//column[u] is emptyfor(int i=1;i<=n;++i) paint[i]=col[i][u];for(int j=n+1;j<=n+m;++j) if(j!=u){for(int i=1;i<=n;++i){ if(col[i][j]!=paint[i]){if(!col[i][j]||(paint[j]!=-1&&paint[j]!=col[i][j])) return;paint[j]=col[i][j],G[i].push_back(j),in[j]++;} if(col[i][j]==paint[i]&&paint[i]!=paint[j])G[j].push_back(i),in[i]++;} }for(int i=1;i<=n+m;++i) if(ban[i]&&paint[i]!=-1&&paint[i]!=0) return;}update();
}
int main(){//  freopen("iridescent.in","r",stdin);
//  freopen("iridescent.out","w",stdout);n=read(),m=read(),c=read();for(int i=1;i<=n;++i)for(int j=n+1;j<=n+m;++j)col[i][j]=read(),ban[i]|=!col[i][j],ban[j]|=!col[i][j];for(int i=1;i<=n+m;++i) check(i);if(ans==oo) return puts("-1"),0;printf("%d\n",ans);for(int i=1;i<=ans;++i) out(i);
}

NOI模拟 五彩斑斓相关推荐

  1. JZOJ 7066. 【2021.4.24 NOI模拟】ehzeux与圆周(DP)

    JZOJ 7066. [2021.4.24 NOI模拟]ehzeux与圆周 题目大意 圆周上有2∗n2*n2∗n个点,两两相连构成nnn个点对,其中有mmm个点对已经连好,求所有方案下的连通块数量和. ...

  2. NOI模拟(5.11) BJOID2T3 治疗之雨 (bzoj5292)

    治疗之雨 题目背景: 5.11 模拟 BJOI2018D2T3 分析:期望DP + 高斯消元优化 我对这道题真的是有一千句喵喵喵,因为一句特判没写,100变10分,内心崩溃.直接说正解吧,定义dp[i ...

  3. NOI模拟(5.19) JSOID2T3 军训列队 (bzoj5319)

    军训列队 题目背景: 5.19 模拟 JSOI2018D2T3 分析:二分 + 主席树 没有想到啊,最水的题竟然在T3,考虑显然如果按照原本的相对顺序填入集合区间,所得的代价一定是最优越的,那么也就是 ...

  4. NOI模拟(5.23) TJOID2T3 教科书般的亵渎 (bzoj5339)

    教科书般的亵渎 题目背景: 5.23 模拟 TJOI2018D2T3 分析:拉格朗日差值 这个题的题意怕不是有毒,注意他每一次的k是相同的,为总共要用多少次卡片,然后卡片是每次先将所有的数减一,如果这 ...

  5. NOI模拟题4 Problem C: 填格子(board)

    Solution 首先我们要有敏锐的直觉: 我们将每一列中不选哪种颜色看作是一个序列, 则我们发现这个序列要求相邻两位的颜色不同. 我们还发现, 一个这样的序列对应两种不同的合法的棋盘, 因此统计合法 ...

  6. 【NOI模拟赛】黑色大桥(DP优化,李超树)

    题面 时间限制:1s,空间限制:1024MB 题目描述 手拿咒刃砍金门,众神直呼不是人 椅子玩自定义咒刃,一路打到了第三关的银行,祂想在黑色大桥无伤看守者之前找点刺激的. 加了模组的银行极大.具体地说 ...

  7. NOI 模拟试题(一)

    智子入侵 [题目背景] 三体发现了人类. 在疲于应付三个无法预测规律的太阳的时候,地球是他们唯一的希望. 为了限制住人类的基础物理研究,避免 300 年的技术爆炸,智子到达了地球. 目标:所有的粒子对 ...

  8. NOI模拟 : Vain (并查集维护割点)

    题意: 对于 1 ≤ i ≤ n, 求出点 i 度数强制为 1 的情况下最小生成树的最大边的权值. 题解: 相当于求出删掉每个点之后的MSTMSTMST的最大值. 我们按边的权值从小到大加入新图, 很 ...

  9. 【NOI模拟赛】纸老虎博弈(博弈论SG函数,长链剖分)

    题面 某天,C 和 K 觉得很无聊,于是决定玩一个经典小游戏: 在一棵有 nnn 个结点的有根树上,标号为 iii 的节点上有 aia_iai​ 个棋子.游戏时玩家轮流操作,每次可以将任意一个节点 u ...

最新文章

  1. 成为软件高手的几个忌讳
  2. 性能超越GPU、FPGA,华人学者提出软件算法架构加速AI实时化
  3. Jackson ObjectMapper
  4. JSP(五):属性范围
  5. 20159320《网络攻防实践》第5周教材总结
  6. Http协议(7)—Http缓存
  7. Alamofire源码导读二:发起请求及内部加锁的逻辑
  8. linux jdk bin下载,Linux下安装jdk-6u45-linux-x64.bin
  9. eclipse中文汉化操作 2020-12
  10. 马斯克搞的超级高铁,为什么注定会失败?
  11. 交换友情链接时要谨防以下12种情况
  12. 邮箱的正确格式是什么,如何发送一封规范的邮件
  13. JavaScript实现节点的增加修改删除查找
  14. 基于Vue.js的2048小游戏的设计与实现
  15. 多线程写法 与老虎机的制作
  16. 谨以此篇献给正在迷茫的人生 浅谈网络时代各种骗局
  17. Bluetooth sco协议录音
  18. 【ShaderToy】开篇
  19. 程序员如何克服浮躁的心态?然后静下心来韬养自己的技术?
  20. jmeter http并发测试设置教程(设置线程组,设置http,csv参数化,查看结果集)

热门文章

  1. 数钱数到手抽筋html5,数钱数到手抽筋的经典句子
  2. SQL--多的是,你不知道的事
  3. Layabox学习笔记
  4. Linux 系统故障排查
  5. 计算机网络原理(谢希仁第八版)第六章课后习题答案
  6. PMP考试总结-2023-05-27
  7. oracle整理笔记
  8. URP中摄像机参数的设置
  9. 一个自学前端的4年工作总结【三十而立,拒绝躺平】
  10. PCDViewer 3.2 Linux 版(Ubuntu)