题意:给出一个 n 点 m 边的图,问最少加多少边使其能够存在奇环,加最少边的情况数有多少种

奇环和偶环其实就是二分图的性质:二分图不存在奇环,所以只要判断这张图是否是二分图就行了:

如果本身就不是二分图,那么说明图中必定有奇环,那就不需要加边,情况数也就是1种了;

而如果是普通的二分图的话,只要有某一个区块有一半点数大于等于2,那么只要将同一边的任意两点连线,就可以使其不是二分图,从而出现奇环,加边数1条,情况数就是算有多少半点数大于等于2的,从中取两点的情况数;

如果全部都是两点图的话,就要对某个两点图,将两点同时连向其他任意一点,就需要加2条边,情况数就是两点组数乘剩余点数;

最后是全部为单点的图,必须连3条线,将任意三点两两相连,情况数就是任取三点的组合数。

  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<algorithm>
  4. using namespace std;
  5. typedef long long ll;
  6.  
  7. int c[];
  8. int n,m,num[];
  9. int head[],nxt[],point[],size=;
  10. bool f=;
  11.  
  12. void add(int a,int b){
  13. point[size]=b;
  14. nxt[size]=head[a];
  15. head[a]=size++;
  16. point[size]=a;
  17. nxt[size]=head[b];
  18. head[b]=size++;
  19. }
  20.  
  21. void dfs(int a,int x){
  22. if(f)return;
  23. c[a]=x;
  24. num[x]++;
  25. for(int i=head[a];~i;i=nxt[i]){
  26. int b=point[i];
  27. if(c[b]==-)dfs(b,!x);
  28. else if(c[b]==x){
  29. f=;
  30. return;
  31. }
  32. }
  33. }
  34.  
  35. int main(){
  36. scanf("%d%d",&n,&m);
  37. if(m==){
  38. ll ans=(ll)n*(ll)(n-)*(ll)(n-)/;
  39. printf("3 %I64d\n",ans);
  40. return ;
  41. }
  42. int i;
  43. memset(head,-,sizeof(head));
  44. memset(c,-,sizeof(c));
  45. for(i=;i<=m;i++){
  46. int a,b;
  47. scanf("%d%d",&a,&b);
  48. add(a,b);
  49. }
  50. ll ans=,ans2=;
  51. for(i=;i<=n&&(!f);i++){
  52. if(c[i]==-){
  53. num[]=num[]=;
  54. dfs(i,);
  55. ans+=(ll)num[]*(ll)(num[]-)/;
  56. ans+=(ll)num[]*(ll)(num[]-)/;
  57. if(num[]==&&num[]==){
  58. ans2+=n-;
  59. }
  60. }
  61. }
  62. if(f)printf("0 1\n");
  63. else if(ans==)printf("2 %I64d\n",ans2);
  64. else printf("1 %I64d\n",ans);
  65. return ;
  66. }

cf 557D 二分图黑白染色的更多相关文章

  1. hdu 5285 二分图黑白染色

    题意:给出 n 个人,以及 m 对互不认识的关系,剩余的人都互相认识,要将所有人分成两组,组内不能有互不认识的人,要求每组至少有一人,并且第一组人数尽量多,问两组人数或不可能时单独输出 BC 48 场 ...

  2. 2019 ACM/ICPC Asia Regional shanxia D Miku and Generals (二分图黑白染色+01背包)

    Miku is matchless in the world!” As everyone knows, Nakano Miku is interested in Japanese generals, ...

  3. HDU1507 Uncle Tom's Inherited Land* 二分图匹配 匈牙利算法 黑白染色

    原文链接http://www.cnblogs.com/zhouzhendong/p/8254062.html 题目传送门 - HDU1507 题意概括 有一个n*m的棋盘,有些点是废的. 现在让你用1 ...

  4. bzoj 2437[Noi2011]兔兔与蛋蛋 黑白染色二分图+博弈+匈牙利新姿势

    noi2011 兔兔与蛋蛋 题目大意 直接看原题吧 就是\(n*m\)的格子上有一些白棋和一些黑棋和唯一一个空格 兔兔先手,蛋蛋后手 兔兔要把与空格相邻的其中一个白棋移到空格里 蛋蛋要把与空格相邻的其 ...

  5. POJ 1466 Girls and Boys 黑白染色 + 二分匹配 (最大独立集) 好题

    有n个人, 其中有男生和女生,接着有n行,分别给出了每一个人暗恋的对象(不止暗恋一个) 现在要从这n个人中找出一个最大集合,满足这个集合中的任意2个人,都没有暗恋这种关系. 输出集合的元素个数. 刚开 ...

  6. 【AGC018F】Two Trees 构造 黑白染色

    题目描述 有两棵有根树,顶点的编号都是\(1\)~\(n\). 你要给每个点一个权值\(a_i\),使得对于两棵树的所有顶点\(x\),满足\(|x\)的子树的权值和\(|=1\) \(n\leq 1 ...

  7. BZOJ.2756.[SCOI2012]奇怪的游戏(二分 黑白染色 最大流ISAP)

    题目链接 \(Description\) \(Solution\) 这种题当然要黑白染色.. 两种颜色的格子数可能相同,也可能差1.记\(n1/n2\)为黑/白格子数,\(s1/s2\)为黑/白格子权 ...

  8. E - Mahmoud and Ehab and the bipartiteness CodeForces - 862B (dfs黑白染色)

    Mahmoud and Ehab continue their adventures! As everybody in the evil land knows, Dr. Evil likes bipa ...

  9. [cf557d]Vitaly and Cycle(黑白染色求奇环)

    题目大意:给出一个 n 点 m 边的图,问最少加多少边使其能够存在奇环,加最少边的情况数有多少种. 解题关键:黑白染色求奇环,利用数量分析求解. 奇环:含有奇数个点的环. 二分图不存在奇环.反之亦成立 ...

随机推荐

  1. J2EE 与 Java EE

    J2EE(Java 2 Enterprise Edition)和Java EE是一样的,由于J2EE的名称容易引起误解,Sun将J2EE更名为Java EE. 2005年6月,JavaOne大会召开, ...

  2. Windows 环境下安装 Oracle JDK

    本页面中描述了如何在 Window 环境下安装 Oracle JDK. 我们使用的版本是 Window 10,我们需要安装的版本是 Oracle JDK 8u191. 检查当前版本 在进行新的 JDK ...

  3. 在 Confluence 6 中的 Jira 权限

    只读(Read Only) 从你 JIRA 应用服务器上取得的用户,用户组和用户组成员.这些用户的信息只能通过你的 JIRA 服务器进行修改. https://www.cwiki.us/display ...

  4. Confluence 6 使用 LDAP 授权连接一个内部目录 - 拷贝用户到登录

    在登录时拷贝用户(Copy User on Login) 这个选项在用户尝试登录的时候将会被触发.如果这个选择框被选择的话,当用户使用 LDAP 授权的用户名和密码登录系统的时候,用户将会在内部目录自 ...

  5. splay训练

    1, CF 455D 2, CF 420D 3, CF 414E

  6. Skills CodeForces - 614D (贪心)

    链接 大意: $n$门课, 第$i$门分数$a_i$, 可以增加共$m$分, 求$cnt_{mx}*cf+mi*cm$的最大值 $cnt_{mx}$为满分的科目数, $mi$为最低分, $cf$, $ ...

  7. stl算法:next_permutation剖析

    在标准库算法中,next_permutation应用在数列操作上比较广泛.这个函数可以计算一组数据的全排列.但是怎么用,原理如何,我做了简单的剖析. 首先查看stl中相关信息.函数原型: templa ...

  8. c# 如何将字符串中用","分开的数字分别存入数组中

    string[] str="1,2,3,11,12,13".Split(',');

  9. 异常检测——局部异常因子(Local Outlier Factor ,LOF)算法

    在中等高维数据集上执行异常值检测的另一种有效方法是使用局部异常因子(Local Outlier Factor ,LOF)算法.1.算法思想 LOF通过计算一个数值score来反映一个样本的异常程度.这 ...

  10. @RunWith和 SpringJUnit4ClassRunner ---->junit4和Spring一起使用

    今天在看Spring的Demo的时候,看到了如此单元测试的写法 如下: @RunWIth(SpringJunit4ClassRunner.class) @ContextConfiguration(lo ...