Description

题意:给定一个点数为n的竞赛图,求图的最小支配集

n<=75

Solution

如果将竞赛图的一个点删去,这个图还是竞赛图

而竞赛图每个点相连的边数为(n-1),那么删去一个点后这个图变成原图一半大小的竞赛图

由此可知竞赛图的最小支配集是log(n)级别的

那么答案最大为6,爆搜即可

Code

#include <cstdio>
#include <algorithm>
#include <cstring>
#include <bitset>
using namespace std; bitset<99> g[99],tmp;
int cas,n,path[9],Ans; bool dfs(int k,int p,bitset<99> cur){
if(k>=Ans) return (cur.count()==n);//支配所有点
for(int i=p;i<=n;++i)
if(dfs(k+1,(path[k+1]=i),cur|g[i])) return 1;
return 0;
} int main(){
while(~scanf("%d",&n)){
for(int i=1;i<=n;++i)
for(int j=1;j<=n;++j){
char ch=getchar();while(ch!='0'&&ch!='1')ch=getchar();
g[i][j]=ch-'0';
if(i==j)g[i][j]=1;//包括自己这个点
}
for(Ans=1;Ans<=10;Ans++) if(dfs(0,1,tmp))break;//迭代加深搜索
printf("Case %d: %d ",++cas,Ans);
for(int i=1;;++i) printf("%d ",path[i]);
printf("\n");
for(int i=1;i<=n;++i) g[i]=tmp;//初始化
}
return 0;
}

最新文章

  1. collection view 开发笔记
  2. 显示XML文档时排序数据
  3. GPIO裸机编程
  4. css修改,类似elememt.style样式修改
  5. Native App、Web App 还是Hybrid App?
  6. Visual C++2010开发权威指南 中文高清PDF - VC.NET
  7. Android:调试之LogCat
  8. System.Drawing.Graphics中比较重要的几个方法
  9. 修改hosts文件(判断是否为管理员/以管理员权限运行脚本)
  10. java udp socket(双通信)
  11. Linux中/etc/fstab /etc/mtab /proc/mounts这三个文件的分析与比较 分区表位置
  12. 从一个微型例子看“C/C++的内存分配机制”和“数组变量名与指针变量名”(转)
  13. Linux mail 邮件发送
  14. Android density、dpi、dp、px
  15. Hive show
  16. 前端 HTML标签介绍
  17. linux网络编程--网络编程的基本函数介绍与使用【转】
  18. 字符串连接比较(std::unique_ptr实现)
  19. C++反汇编-菱形继承
  20. &lt;数据挖掘导论&gt;读书笔记11异常检测

热门文章

  1. MySQL慢查询分析工具pt-query-digest详解
  2. 对DOM操作的一些总结
  3. 基于Python3 神经网络的实现
  4. 数据批量删除_从页面js到后台数据库
  5. python 生成随机图片验证码
  6. Odoo (OpenERP/TinyERP)-10.0 (Debian 8)
  7. java中将数组、对象、Map、List转换成JSON数据
  8. azkaban调度
  9. 解决频繁自动弹出“QQ拼音升级程序”,可使用旧版QQ输入法
  10. VPS一键测试脚本 / 自带结果导出