加载中...

二分图 在两个房间里分配

1.常见输入 给出 a b c

囚犯分房间 https://www.acwing.com/problem/content/259/ 二分答案+二分图

二分 染色处理到小于等于mid 的值的时候需要continue 相当于不管他把他放在同一个房间里面

dfs(c)
首先当前点染成c
枚举所有领点
如果边的权值小于mid的话就需要不考虑continue
j表示领点
如果领点已经有颜色
而且如果颜色和当前点的颜色相同 返回false
否则如果染色(3-c)失败 返回false
最后能到达这里返回真

所有颜色清空
枚举所有点
没有染过就给他染色
如果染色返回矛盾
返回false
所有点没有报错返回正确

2.二维棋盘覆盖 一个格子只能选另一个相邻一个格子 看看能选多少个

int match[N] //对右边图的连接的点 这里存的是二维所以是[][]
bool st[N] 有没有

dfs 问问左边的图
枚举所有领点
如果不合法 continue
如果遍历过 continue

标记为已经遍历
t表示下一个点 也就是对面图的女生
如果match[j]==0(女生没被分配过) 或者dfs(match[j]) 为女生现在的男友分配对象 后成功

那么就为这个女生分配这个男生
返回真

枚举所有一个图(这里是枚举奇数点)
如果能find 答案++;

posted @ 2022-07-05 22:47  liang302  阅读(27)  评论(0编辑  收藏  举报