题目:https://www.luogu.org/problemnew/show/P5061

就是建出补图来,二分图染色。

做DP,f[ i ]表示一个队里人数是否能达到 i 人。如果图合法,能达到 i 人的话一定能达到 n-i 人。因为初值是 f[ 0 ] = 1 ,所以别用 f[ 0 ] 判断,对于这中情况用 f[ n ] 判断就行了。

如果图不合法,不知道第三问是什么意思了。(反正2组分不下,那就默契的两个人在一组,剩下的人一人一组还不行?)不过好像输出 m 就行了。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const int N=2505,mod=1e9+7;
int n,m,dfn[N],tot,cl[3],col[N],bin[N];
bool b[N][N],flag,f[N];
int rdn()
{int ret=0;bool fx=1;char ch=getchar();while(ch>'9'||ch<'0'){if(ch=='-')fx=0;ch=getchar();}while(ch>='0'&&ch<='9')ret=ret*10+ch-'0',ch=getchar();return fx?ret:-ret;
}
void dfs(int cr)
{dfn[cr]=tot;cl[col[cr]]++;for(int i=1;i<=n;i++)if(!b[i][cr]){if(col[i]&&col[i]==col[cr]){flag=1;return;}if(!col[i])col[i]=3-col[cr], dfs(i);}
}
int main()
{n=rdn(); m=rdn();for(int i=1,u,v;i<=m;i++){u=rdn(); v=rdn();b[u][v]=b[v][u]=1;}for(int i=1;i<=n;i++)b[i][i]=1;f[0]=1;for(int i=1;i<=n;i++)if(!col[i]){tot++;cl[1]=cl[2]=0;col[i]=1;dfs(i);if(flag)break;for(int j=n;j>=0;j--){if(j-cl[1]>=0)f[j]|=f[j-cl[1]];if(j-cl[2]>=0)f[j]|=f[j-cl[2]];}}if(flag){printf("-1\n%d\n",m);return 0;}bin[0]=1;for(int i=1;i<=n;i++)bin[i]=((ll)bin[i-1]<<1)%mod;int ans=0,prn=0;for(int i=(n+1)>>1;i<=n;i++)if(f[i]){ans++; if(!prn)prn=i;}prn=bin[prn]-bin[n-prn];if(prn<0)prn+=mod;printf("%d %d\n",ans,prn);ans=0;for(int i=1;i<=n;i++)for(int j=i+1;j<=n;j++)if(b[i][j]&&dfn[i]==dfn[j]&&col[i]!=col[j])ans++;printf("%d\n",ans);return 0;
}

转载于:https://www.cnblogs.com/Narh/p/10081513.html

洛谷 5061 秘密任务——二分图染色相关推荐

  1. 洛谷P1402 酒店之王(二分图)

    P1402 酒店之王 题目描述 XX酒店的老板想成为酒店之王,本着这种希望,第一步要将酒店变得人性化.由于很多来住店的旅客有自己喜好的房间色调.阳光等,也有自己所爱的菜,但是该酒店只有p间房间,一天只 ...

  2. 洛谷P1640 连续攻击游戏 二分图匹配

    给出n≤1e6n\leq1e6n≤1e6个装备,每个装备都有两个属性值,它的范围一定在[1,10000][1,10000][1,10000],你每个装备只能选择一个属性值,然后要求出最长的一段从111 ...

  3. 洛谷P3155:叶子的染色(树形dp)

    解析 本题的关键是选取哪一个根对答案没有影响 还有一个重要的性质是:根节点必定涂色 这点对每棵子树作为独立的子问题时依然成立 然鹅我完全没有看到上面那俩性质 直接暴力设计dp状态0..1.2 开始莽 ...

  4. 洛谷2486 【SDOI2011】染色(线段树+树链剖分)

    传送门 [题目分析] 果然重构才是真理吗..... 因为涉及路径操作,所以考虑树链剖分,线段树维护题意中的: 1.区间颜色段数. 2.区间左右颜色. 3.区间覆盖标记. 因为线段树的问题主要就是考虑p ...

  5. 二分图——洛谷P1155 双栈排序

    https://daniu.luogu.org/problem/show?pid=1155 二分图染色+模拟 1.首先考虑一个简单情况--单栈排序,显然有这样的一个事实: a[i]和a[j] 不能压入 ...

  6. 洛谷:P1129 [ZJOI2007] 矩阵游戏(二分图最大匹配)

    洛谷:矩阵游戏 洛谷题解就挺好 目的是使得最终(1,1)(2,2)-(n,n)都有一个点 可以看作为,最终状态需要每 i 行和 i 列都存在一个匹配 建图方式:对于 i 行 j 列的1点,建一条 i ...

  7. (二分图)洛谷P2071座位安排

    洛谷P2071座位安排 思路: 网络流难在建图上面. 这题(应该也可以,我没尝试过)用二分图匹配去跑.可以拆点,将一排的座位拆成两个点,一个iii,一个i+ni+ni+n,然后匈牙利算法跑. 也可以用 ...

  8. 洛谷P3386:网络流之二分图匹配,最大流算法

    二分图:我的理解是,对图中的点集,可分为两个集合U和V,使得两个集合之间存在通路,且集合内部不存在通路.如上图. 匹配:两两不含公共端点的边集合M 最大匹配:边数最多的匹配 完美匹配:最大匹配的匹配数 ...

  9. 洛谷 P3386 【模板】二分图匹配

    洛谷 P3386 [模板]二分图匹配 题目 题目背景 二分图 题目描述 给定一个二分图,结点个数分别为n,m,边数为e,求二分图最大匹配数 输入输出格式 输入格式: 第一行,n,m,e 第二至e+1行 ...

最新文章

  1. 删除windows7的隐藏分区
  2. java四子棋实验报告_Python 实现劳拉游戏的实例代码(四连环、重力四子棋)
  3. 【opencv】经典的细化提取骨架理论及源代码
  4. Linux C 读取文件夹下所有文件(包括子文件夹)的文件名
  5. 鼠标问题:鼠标拖拽不灵敏,准备复制拖动的半截就断了
  6. 【Elasticsearch】在Elasticsearch中支持纳秒时间戳
  7. linux 文件差异备份,Linux使用 tar命令-g参数进行增量+差异备份、还原文件
  8. spring的一些概念及优点
  9. SQL Server 2005存储过程示例
  10. Java基础知识(一) 自增、自减运算符
  11. 26. Location assign() 方法
  12. Python数据分析之理论知识
  13. Horizon client 连接桌面后显示:USB已禁用/USB重定向功能已禁用
  14. Kettle/Pentaho的安装与配置
  15. mp3转wav方法,mp3转wav步骤
  16. js 打印去掉页眉页脚页码_javascript 打印时去掉页眉页脚
  17. FPGA第一天的学习-LED流水灯
  18. 采样定理 ADC采样
  19. 拯救全球变暖,人工智能被用于寻找可降温地球的珊瑚礁
  20. javaScript封装的各种写法

热门文章

  1. Trigger与Flip-Flop两种‘触发器’的区别
  2. 【小样本分割】PFENet
  3. js实现html代码高亮,使用highlight.js高亮代码
  4. Ubuntu/linux c开发(4)线程池
  5. 想多活几年吗??在中国到底什么能吃什么不能吃!(转)
  6. 媒体文件查看/上传至WP媒体库
  7. 3dsMax 修改为中文
  8. 慕课学习史上最全零基础入门HTML5和CSS笔记
  9. 关于noilinux的一些操作方法
  10. Apache Hive 2.1.1 安装配置超详细过程,配置hive、beeline、hwi、HCatalog、WebHCat等组件...