[HDU5765]Bonds
题意
给出一张\(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
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
#define ll long long
int gi()
{
int x=0,w=1;char ch=getchar();
while ((ch<'0'||ch>'9')&&ch!='-') ch=getchar();
if (ch=='-') w=0,ch=getchar();
while (ch>='0'&&ch<='9') x=(x<<3)+(x<<1)+ch-'0',ch=getchar();
return w?x:-x;
}
const int N = 1<<21;
int T,n,m,all,u[500],v[500],reach[N],able[N],sum,tot[N];
queue<int>Q;
inline int lowbit(int k){return k&-k;}
int main()
{
T=gi();
for (int zsy=1;zsy<=T;++zsy)
{
n=gi();m=gi();all=(1<<n)-1;sum=0;
memset(reach,0,sizeof(reach));
memset(able,0,sizeof(able));
memset(tot,0,sizeof(tot));
for (int i=1;i<=m;++i)
{
u[i]=gi();v[i]=gi();
reach[1<<u[i]]|=1<<v[i];
reach[1<<v[i]]|=1<<u[i];
}
for (int i=0;i<=all;++i)
reach[i]=reach[lowbit(i)]|reach[i^lowbit(i)];
for (int i=0;i<n;++i)
Q.push(1<<i),able[1<<i]=1;
while (!Q.empty())
{
int u=Q.front();Q.pop();
int tmp=reach[u];
while (tmp)
{
int v=u|lowbit(tmp);
if (!able[v]) able[v]=1,Q.push(v);
tmp^=lowbit(tmp);
}
}
for (int i=0;i<=all;++i)
if (able[i]&&able[i^all])
++sum,++tot[i];
sum>>=1;
for (int j=0;j<n;++j)
for (int i=all;i>=0;--i)
if ((i&(1<<j))==0) tot[i]+=tot[i|(1<<j)];
printf("Case #%d:",zsy);
for (int i=1;i<=m;++i)
printf(" %d",sum-tot[(1<<u[i])|(1<<v[i])]);
puts("");
}
}
[HDU5765]Bonds的更多相关文章
- HDU5765 Bonds 最小割极
http://acm.hdu.edu.cn/showproblem.php?pid=5765 题意:无向连通图,问每条边在几个最小割极上 思路:用位压形式,表示边的关系.g[1<<i]=1 ...
- HDU 5765 Bonds 巧妙状压暴力
题意:给一个20个点无向连通图,求每条边被多少个极小割集包括 分析:极小割集是边的集合,很显然可以知道,极小割集恰好吧原图分成两部分(这个如果不明白可以用反证法) 然后就是奉上官方题解:http:// ...
- QiQi and Bonds
只有链接:http://sdu.acmclub.com/index.php?app=problem_title&id=961&problem_id=23685 题意:现在有n个QiQi ...
- HDU 5765 Bonds(状压DP)
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=5765 [题目大意] 给出一张图,求每条边在所有边割集中出现的次数. [题解] 利用状压DP,计算不 ...
- HDU 5765 Bonds
比赛时候想了好久,不会.看了官方题解才会...... Bond是极小割边集合,去掉一个Bond之后,只会将原图分成两个连通块. 假设某些点构成的集合为 s(点集中的点进行状压后得到的一个十进制数),那 ...
- HDU.5765.Bonds(DP 高维前缀和)
题目链接 \(Description\) 给定一张\(n\)个点\(m\)条边的无向图.定义割集\(E\)为去掉\(E\)后使得图不连通的边集.定义一个bond为一个极小割集(即bond中边的任意一个 ...
- bonds
Linux--多网卡的7种Bond模式 http://www.cnblogs.com/lcword/p/5914089.html 七种网卡绑定模式详解: http://blog.csdn.net/w ...
- 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 ...
- 探索C#之微型MapReduce
MapReduce近几年比较热的分布式计算编程模型,以C#为例简单介绍下MapReduce分布式计算. 阅读目录 背景 Map实现 Reduce实现 支持分布式 总结 背景 某平行世界程序猿小张接到B ...
随机推荐
- Discuz的安装与使用
Discuz的安装与使用 一.Discuz的安装 由于本机已经安装好XAMPP集成工具,后续Discuz访问数据库以及服务器等都是基于XAMPP环境.在主机localhost根目录下新建bbs文件夹. ...
- 剑指offer第七天
30.连续子数组的最大和 HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学.今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决 ...
- CodeForces-748D 贪心
这题的思维难度不是很大,属于编程实现细节处理较多的题. 暂且把每个字符串的"beauty"称为魅力值,用一个优先队列数组将同一个字符串的所有魅力值保存,通过map将不同字符串编号, ...
- poj2635 同余定理 + 素数筛法
题意:给定一个数,这个数是两个素数的乘积,并给定一个限制L,问是否两个素数中存在小于L的数,若存在输出较小质数,否则打印'GOOD'. 思路: 1 . x = a * b, a和b都是素数,那么x只能 ...
- ElasticSearch AggregationBuilders java api常用聚会查询
以球员信息为例,player索引的player type包含5个字段,姓名,年龄,薪水,球队,场上位置.index的mapping为: "mappings": { "pl ...
- 【开源项目】智能电视及电视盒子的控制应用TVRemoteIME的接口说明
一.APP项目介绍: APP名称:TVRemoteIME 功能说明:安卓智能电视或者安卓盒子的控制应用,可跨屏远程输入.远程遥控(代替遥控器)盒子.盒子应用及文件管理.HTTP/RTMP/MMS网络视 ...
- [HNOI2014]道路堵塞
题目描述 A国有N座城市,依次标为1到N.同时,在这N座城市间有M条单向道路,每条道路的长度是一个正整数.现在,A国交通部指定了一条从城市1到城市N的路径,并且保证这条路径的长度是所有从城市1到城市N ...
- Linux基础六
用户账号管理 基于账号身份对资源访问进行控制 账户类别:用户账号,组账号 识别方式:UID,GID 用户账号:超级用户root,系统用户,普通用户 组账号:用来区分权限,不用于登陆 基本组(私有组) ...
- windows下常用工具
下面是平时自用的一些软件,感觉挺好用的,推荐给大家咯. everything 搜索神器 faststone capture 红绿小工具,工具小功能强 clcl 复制粘贴神器 f.lux linux和w ...
- jquery 图片转为base64
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...