用户工具

站点工具


2020-2021:teams:manespace:2020_07_18-2020_07_24周报_week11

差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录 前一修订版
后一修订版
前一修订版
2020-2021:teams:manespace:2020_07_18-2020_07_24周报_week11 [2020/07/26 19:05]
iuiou
2020-2021:teams:manespace:2020_07_18-2020_07_24周报_week11 [2020/07/31 10:33] (当前版本)
quantumbolt
行 1: 行 1:
-======2020/​07/​18–2020/​07/​24周报(week10)======+======2020/​07/​18–2020/​07/​24周报(week11)======
  
 =====本周推荐===== =====本周推荐=====
 ====by iuiou==== ====by iuiou====
- * **题源**:[[https://​codeforces.com/​contest/​1385/​problem/​G]]+  ​* **题源**:[[https://​codeforces.com/​contest/​1385/​problem/​G]]
  
- * **题意**:给定两排数,每排都有$n$个数,每次操作可以交换一列的两个数,问能否存在一个最少的交换方案,使操作之后每一行都是$1$到$n$的一个排列。+  ​* **题意**:给定两排数,每排都有$n$个数,每次操作可以交换一列的两个数,问能否存在一个最少的交换方案,使操作之后每一行都是$1$到$n$的一个排列。
   ​   ​
- ***知识点**:dfs+  ​***知识点**:dfs
    
- * **题解**:这题有点难想,大致是一个二分图的问题。首先遍历两行数,如果一个数的出现次数超过了2次,那么肯定不成立。如果所有数出现次数都是两次,那么一定有一种方案满足。现定四个数组$r1[n],​r2[n],​b1[n],​b2[n],​b$数组用于存放列数,$r$数组用于存放行数,如果对于一个数$i$,​$b_{1i}=b_{2i}$,​则不考虑这个点,因为肯定不会动这个点的。接下来对点染色,如果$b_{1i}≠b_{2i}$,​考虑$r$数组,如果$r_{1i}≠r_{2i}$,​则在$b_{1i}$和$b_{2i}$之间连一条权为0的边表示,两点染的色必须相同。反之,连一条权为$1$的边,表示两个点颜色相反,最后从每个点开始$dfs$经行染色即可,​注意每次比对将开头的那个点染成$1$还是$0$,最后的结果会最优(即最少)。+  ​* **题解**:这题有点难想,大致是一个二分图的问题。首先遍历两行数,如果一个数的出现次数超过了2次,那么肯定不成立。如果所有数出现次数都是两次,那么一定有一种方案满足。现定四个数组$r1[n],​r2[n],​b1[n],​b2[n],​b$数组用于存放列数,$r$数组用于存放行数,如果对于一个数$i$,​$b_{1i}=b_{2i}$,​则不考虑这个点,因为肯定不会动这个点的。接下来对点染色,如果$b_{1i}≠b_{2i}$,​考虑$r$数组,如果$r_{1i}≠r_{2i}$,​则在$b_{1i}$和$b_{2i}$之间连一条权为0的边表示,两点染的色必须相同。反之,连一条权为$1$的边,表示两个点颜色相反,最后从每个点开始$dfs$经行染色即可,​注意每次比对将开头的那个点染成$1$还是$0$,最后的结果会最优(即最少)。
  
 =====团队训练===== =====团队训练=====
2020-2021/teams/manespace/2020_07_18-2020_07_24周报_week11.1595761522.txt.gz · 最后更改: 2020/07/26 19:05 由 iuiou