题面

题意

给出一张\(n\)点\(m\)边无向连通图,求每条边出现在多少个割集中。

\(n\le20,m\le\frac{n(n-1)}{2}\)

sol

所谓割集,就是指把\(n\)个点分成两个集合后,两个集合分别都是连通的。

所以我们可以预处理出每一个点集是否连通。

考虑边\((u,v)\)。实际上\((u,v)\)要出现在割集中,\(u,v\)就必然在不同的点集中。

来一波总方案减不合法

所有可行的割的方案减去\(u,v\)在同一个割集里面的方案。

\(u,v\)在同一个割集里面的方案实际上就是集合\(\{u,v\}\)的超集之和。高维前缀和搞一搞。

前面那个预处理每个点集是否连通,使用\(bfs\)处理。

处理出每个点集的相邻点集,每次\(bfs\)时候向外扩展一个节点,若未访问就丢到队列里面去。

复杂度\(O(n\log{n})\)

code

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<algorithm>
  4. #include<queue>
  5. using namespace std;
  6. #define ll long long
  7. int gi()
  8. {
  9. int x=0,w=1;char ch=getchar();
  10. while ((ch<'0'||ch>'9')&&ch!='-') ch=getchar();
  11. if (ch=='-') w=0,ch=getchar();
  12. while (ch>='0'&&ch<='9') x=(x<<3)+(x<<1)+ch-'0',ch=getchar();
  13. return w?x:-x;
  14. }
  15. const int N = 1<<21;
  16. int T,n,m,all,u[500],v[500],reach[N],able[N],sum,tot[N];
  17. queue<int>Q;
  18. inline int lowbit(int k){return k&-k;}
  19. int main()
  20. {
  21. T=gi();
  22. for (int zsy=1;zsy<=T;++zsy)
  23. {
  24. n=gi();m=gi();all=(1<<n)-1;sum=0;
  25. memset(reach,0,sizeof(reach));
  26. memset(able,0,sizeof(able));
  27. memset(tot,0,sizeof(tot));
  28. for (int i=1;i<=m;++i)
  29. {
  30. u[i]=gi();v[i]=gi();
  31. reach[1<<u[i]]|=1<<v[i];
  32. reach[1<<v[i]]|=1<<u[i];
  33. }
  34. for (int i=0;i<=all;++i)
  35. reach[i]=reach[lowbit(i)]|reach[i^lowbit(i)];
  36. for (int i=0;i<n;++i)
  37. Q.push(1<<i),able[1<<i]=1;
  38. while (!Q.empty())
  39. {
  40. int u=Q.front();Q.pop();
  41. int tmp=reach[u];
  42. while (tmp)
  43. {
  44. int v=u|lowbit(tmp);
  45. if (!able[v]) able[v]=1,Q.push(v);
  46. tmp^=lowbit(tmp);
  47. }
  48. }
  49. for (int i=0;i<=all;++i)
  50. if (able[i]&&able[i^all])
  51. ++sum,++tot[i];
  52. sum>>=1;
  53. for (int j=0;j<n;++j)
  54. for (int i=all;i>=0;--i)
  55. if ((i&(1<<j))==0) tot[i]+=tot[i|(1<<j)];
  56. printf("Case #%d:",zsy);
  57. for (int i=1;i<=m;++i)
  58. printf(" %d",sum-tot[(1<<u[i])|(1<<v[i])]);
  59. puts("");
  60. }
  61. }

[HDU5765]Bonds的更多相关文章

  1. HDU5765 Bonds 最小割极

    http://acm.hdu.edu.cn/showproblem.php?pid=5765 题意:无向连通图,问每条边在几个最小割极上 思路:用位压形式,表示边的关系.g[1<<i]=1 ...

  2. HDU 5765 Bonds 巧妙状压暴力

    题意:给一个20个点无向连通图,求每条边被多少个极小割集包括 分析:极小割集是边的集合,很显然可以知道,极小割集恰好吧原图分成两部分(这个如果不明白可以用反证法) 然后就是奉上官方题解:http:// ...

  3. QiQi and Bonds

    只有链接:http://sdu.acmclub.com/index.php?app=problem_title&id=961&problem_id=23685 题意:现在有n个QiQi ...

  4. HDU 5765 Bonds(状压DP)

    [题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=5765 [题目大意] 给出一张图,求每条边在所有边割集中出现的次数. [题解] 利用状压DP,计算不 ...

  5. HDU 5765 Bonds

    比赛时候想了好久,不会.看了官方题解才会...... Bond是极小割边集合,去掉一个Bond之后,只会将原图分成两个连通块. 假设某些点构成的集合为 s(点集中的点进行状压后得到的一个十进制数),那 ...

  6. HDU.5765.Bonds(DP 高维前缀和)

    题目链接 \(Description\) 给定一张\(n\)个点\(m\)条边的无向图.定义割集\(E\)为去掉\(E\)后使得图不连通的边集.定义一个bond为一个极小割集(即bond中边的任意一个 ...

  7. bonds

    Linux--多网卡的7种Bond模式 http://www.cnblogs.com/lcword/p/5914089.html 七种网卡绑定模式详解:  http://blog.csdn.net/w ...

  8. Why did I have a recovery trip

    For more than a decade, I felt most at ease living out of a suitcase, never quite sure where I might ...

  9. 探索C#之微型MapReduce

    MapReduce近几年比较热的分布式计算编程模型,以C#为例简单介绍下MapReduce分布式计算. 阅读目录 背景 Map实现 Reduce实现 支持分布式 总结 背景 某平行世界程序猿小张接到B ...

随机推荐

  1. mysql 密码过期问题

    问题描述: Your password has expired. To log in you must change it using a client that supports expired p ...

  2. 一个很好的MySQL在线学习平台

    一个很好的MySQL在线学习平台 https://www.techonthenet.com/sql/

  3. JSP基础点滴

    注释:<%-- 注释 --%> JSP中一共有3种Scriptlet代码.支持与HTML的代码混编. 第一种:<%%>  定义局部变量,编写语句. 第二种:<%!%> ...

  4. 日均数据量千万级,MySQL、TiDB两种存储方案的落地对比

    http://mp.weixin.qq.com/s?__biz=MzIzNjUxMzk2NQ==&mid=2247484743&idx=1&sn=04337e020d268a9 ...

  5. oracle12c各个版本对其需要的依赖包及系统参数的修改

    本文来自我的github pages博客http://galengao.github.io/ 即www.gaohuirong.cn 以下是我在oracle官网上对oracle12c 各个版本的依赖包需 ...

  6. 使用JS代码实现点击按钮下载文件

    有时候我们在网页上需要增加一个下载按钮,让用户能够点击后下载页面上的资料,那么怎样才能实现功能呢?这里有两种方法: 现在需要在页面上添加一个下载按钮,点击按钮下载文件. 题外话,这个下载图标是引用的 ...

  7. JMeter之Http协议接口性能测试

    一.不同角色眼中的接口 1.1,开发人员眼中的接口    1.2,测试人员眼中的接口 二.Http协议基本介绍 2.1,常见的接口协议 1.:2. :3. :4.:5.: 6. 2.2,Http协议栈 ...

  8. include指令和include动作

  9. uva1625

    思路:每次选择颜色面临有两个选择:1.序列A的首部颜色 2.序列B的首部元素,定义状态d[i][j]表示A序列已经选取了前i个颜色,B序列已经选取了前j个颜色的情况下最小的L(c)总和. 状态转移:c ...

  10. HDU - 2612 bfs [kuangbin带你飞]专题一

    分别以两个人的家作为起点,bfs求得到每个KFC最短距离.然后枚举每个KFC,求得时间之和的最小值即可. 此题不符合实际情况之处:  通过了一个KFC再去另一个KFC可以吗? 出题人都没好好想过吗? ...