题解 —— 风纪委员
题目:
小爱作为风纪委员绝对不能容许扰乱风纪的事情出现!当然和小太的事情总是要在合适的时间和地点解决的~而且反正也得到了上面的许可外加声援什么的。
好吧扯远了~现在学校里有一些经常扰乱风纪的少年和少女~其中有些人是相互认识的,如果一个班里所有人都相互认识那么这个班的成员就会集体翘课。现在要把这些人分成两个人数相同的班级,小爱要知道两个班的人都会集体翘课的方案数有多少种。
题意:求将一张图分为两个完全图的方案数.
这题看似很难,但仔细琢磨一遍,发现: 还是很难!
定义两个集合 $A,B$,对应两个完全图
发现若两个点 $a,b$ 若无连边,两个点就不可能在同一集合内
这就启发我们将所有没有连边的关系重新建成一张图 $G'$ ,即补图
很明显 $G'$ 有可能不连通。
由于这张图上同一条边连接的两个点不可能在一个集合内,即这是一张二分图,我们可以对它染黑白色。
当然,如果一个连通块不是二分图(即存在边数 $>1$ 的奇环),输出 $0$
(染色随便染)
处理完每个连通块后,由于实际黑色的个数是等于白色的个数的,所以我们需要对某些连通块反色
定义状态 $F[i][j]$ 表示做到第 $i$ 个块颜色个数差为 $j$ 的方案数
有两种不同决策:将连通块内黑色丢入 $A$ 或 $B$,白色相反
于是有了下列转移方程
$F[i][j] = (F[i-1][abs(j - a[i] + b[i])] + F[i-1][abs(j - a[i] + b[i])])$
巨佬要滚数自己滚吧,忘记说了 $n <= 100$
Code:
1 #include<cstring> 2 #include<cstdio> 3 #define R register 4 #define MAXN 110 5 #define mod 1000000007 6 #define abs(_a) ((_a)<0?-(_a):_a) 7 using namespace std; 8 int n,m,cnt = 0; 9 struct BLOCK{ 10 int a,b; 11 }B[MAXN]; 12 int from[MAXN],col[MAXN]; 13 bool G[MAXN][MAXN],flag; 14 int sks,slr; 15 int dp[MAXN][MAXN]; 16 void dfs(int u,int g) 17 { 18 from[u] = cnt; 19 col[u] = g; 20 g ? ++sks : ++slr; 21 for(R int i = 1; i <= n; i++) 22 { 23 if(flag) return; 24 if(col[i] == g && !G[i][u] && from[i] && i != u) //存在奇环 25 { 26 puts("0"); 27 flag = 1; 28 return; 29 } 30 if(from[i]) continue; 31 if(!G[i][u])dfs(i,g^1); 32 } 33 } 34 int main() 35 { 36 memset(col,-1,sizeof(col)); 37 scanf("%d%d",&n,&m); 38 for(R int i = 1; i <= m; i++) 39 { 40 int u,v; 41 scanf("%d%d",&u,&v); 42 G[u][v] = G[v][u] = true; 43 } 44 for(R int i = 1; i <= n; i++) 45 { 46 if(from[i]) continue; 47 ++cnt; 48 sks = slr = 0; 49 dfs(i,0); 50 if(flag) return 1 ^ 1; 51 B[cnt].a = sks; 52 B[cnt].b = slr; 53 } 54 dp[0][0] = 1; 55 for(R int i = 1; i <= cnt; i++) 56 for(R int j = 0; j <= n; j++) 57 { 58 dp[i][j] = (dp[i-1][abs(j+B[i].a-B[i].b)] + dp[i-1][abs(j-B[i].a+B[i].b)])%mod; 59 } 60 printf("%d",dp[cnt][0]); 61 return 0; 62 }
转载于:https://www.cnblogs.com/QuickSilverX/p/10701114.html
题解 —— 风纪委员相关推荐
- CSUSTOJ-伊井野弥子是风纪委员(简单BFS)
题目连接:http://acm.csust.edu.cn/problem/4051 博客园食用链接:https://www.cnblogs.com/lonely-wind-/p/13941896.ht ...
- 长沙理工大学第十五届程序设计竞赛部分题解
校赛都过去了几天了才想起来写博客 老懒狗了 这次感觉算一点点超常发挥 出了七题 排在第八名 还拿了两个一血气球 虽然之后发现有道题暴力就能过 但是还是挺开心的 而且这次比yy他们队还高一名 哈哈哈哈 ...
- XUPT_STA2018(部分题解)
A - 一方通行和最大公约数I CodeForces - 664A 作为学园都市最强的lv5,一方通行必须解决一道数学题才能接触last order身上植入的病毒,请你帮他解决这个问题. 给出 ...
- 2018级《程序设计基础(B)I》期末上机考试 重现(第二场)
御坂美琴与妹妹们 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Problem Description 在[量产型能力者计划 ...
- 【2021-08-05 修订】【梳理】计算机网络:自顶向下方法 第六章 链路层和LAN(docx)
计算机网络 知 识 梳 理 (第一版) 建议先修课程:数据结构. 配套教材: Computer Networking - A Top Down Approach, 7th edition James ...
- 顶级测试框架Jest指南:跑通一个完美的程序,就是教出一群像样的学生
facebook三大项目:yarn jest metro,有横扫宇宙之势. 而jest项目的宗旨为:减少测试一个项目所花费的时间成本和认知成本. --其实,它在让你当一个好老师. jest文档非常简略 ...
- 梦三花重金修改服务器,B站梦花BILIBILI挂机助手 – 9.10更新
梦花BILIBILI助手 win server系统崩溃解决方法:添加数据执行保护,具体措施自行百度 感谢@C丶情提供的解决措施 梦花哔哩助手 主要功能: 1.全自动模拟B站直播观看(PC&PE ...
- 哔哩哔哩“红杏出墙”
B站自陈睿掌舵以来,一直在朝着"中国的YouTube"方向发展,主打中国最大的年轻人聚集地.越来越主流化的B站看似与建站之初的二次元文化聚集地相距甚远,很多用户埋怨B站变味儿,转向 ...
- Go C画图 CSP-J CSP-S NOIP 信息学奥赛 2023.02.06测试题
一.单项选择题(共 20 题,每题 1.5 分,共计 30 分:每题有且仅有一个正确选项) 第 7 题 博艾中学进行了一次信息学会考测试,其优.良.及格.不及格的试卷数量分别为 10,13,14,5 ...
最新文章
- mingw msys 编译 libzip
- LetCode: 150. 逆波兰表达式求值
- (网络编程)TCP实现聊天
- 理解spark中的job、stage、task
- [19/04/11-星期四] 多线程_并发协作(生产者/消费者模式_2种解决方案(管程法和信号灯法))...
- 《剑指offer》像素翻转
- mount 安卓system只读_Android如何让system分区可读写(MTK安卓6.0)-阿里云开发者社区...
- 深入理解 操作系统 SJF算法(以洛谷P1223题为例)
- 硬件——nrf51822第二篇,如何设置keil用来下载程序
- 使用Sysmon分析宏病毒(Macros Downloader)
- layui tree ajax刷新,layer 刷新某个页面的实现方法
- 《java数据结构与算法》系列之“开篇”
- Kubernetes 小白学习笔记(32)--kubernetes云原生应用开发-sidecar注入和istio服务治理演示
- 4个最受欢迎的大数据可视化工具
- Django 框架图
- python语音转文字库_有没有语音转文字的APP?
- SQL server 2008不允许保存更改的解决办法
- 仿阿里云后台管理界面模板html源码——后台
- c语言中数组名和数组名取地址理解
- 外边距 - margin