最小顶点覆盖:用最少的点,让每条边都至少和其中一个点关联;

。。。以为自己很聪明。。用边连边。。。最后还是点连点  哎。。。。

hc 写的  匈牙利足够/////

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <queue>
  5. #include <algorithm>
  6. #include <cmath>
  7. #include <vector>
  8. #define mem(a, b) memset(a, b, sizeof(a))
  9. using namespace std;
  10. const int maxn = , INF = 0x7fffffff;
  11. int dx[maxn], dy[maxn], cx[maxn], cy[maxn], used[maxn];
  12. int nx, ny, dis, n;
  13. vector<int> G[maxn];
  14. int bfs()
  15. {
  16. queue<int> Q;
  17. dis = INF;
  18. mem(dx, -);
  19. mem(dy, -);
  20. for(int i=; i<=nx; i++)
  21. {
  22. if(cx[i] == -)
  23. {
  24. Q.push(i);
  25. dx[i] = ;
  26. }
  27. }
  28. while(!Q.empty())
  29. {
  30. int u = Q.front(); Q.pop();
  31. if(dx[u] > dis) break;
  32. for(int v=; v<G[u].size(); v++)
  33. {
  34.  
  35. int i = G[u][v];
  36. if(dy[i] == -)
  37. {
  38. dy[i] = dx[u] + ;
  39. if(cy[i] == -) dis = dy[i];
  40. else
  41. {
  42. dx[cy[i]] = dy[i] + ;
  43. Q.push(cy[i]);
  44. }
  45. }
  46. }
  47. }
  48. return dis != INF;
  49. }
  50.  
  51. int dfs(int u)
  52. {
  53. for(int v=; v<G[u].size(); v++)
  54. {
  55. int i = G[u][v];
  56. if(!used[i] && dy[i] == dx[u] + )
  57. {
  58. used[i] = ;
  59. if(cy[i] != - && dis == dy[i]) continue;
  60. if(cy[i] == - || dfs(cy[i]))
  61. {
  62. cy[i] = u;
  63. cx[u] = i;
  64. return ;
  65. }
  66. }
  67. }
  68. return ;
  69. }
  70.  
  71. int hk()
  72. {
  73. int res = ;
  74. mem(cx, -);
  75. mem(cy, -);
  76. while(bfs())
  77. {
  78. mem(used, );
  79. for(int i=; i<=nx; i++)
  80. {
  81. if(cx[i] == - && dfs(i))
  82. res++;
  83. }
  84. }
  85. return res;
  86. }
  87.  
  88. int main()
  89. {
  90. while(cin>> n)
  91. {
  92. for(int i=; i<maxn; i++) G[i].clear();
  93. for(int i=; i<n; i++)
  94. {
  95. int u, m;
  96. scanf("%d:(%d)",&u, &m);
  97. for(int j=; j<m; j++)
  98. {
  99. int v;
  100. scanf("%d",&v);
  101. G[u].push_back(v);
  102. G[v].push_back(u);
  103. }
  104.  
  105. }
  106.  
  107. nx = ny = n-;
  108. // cout<< rt<< " " << nx << " " <<endl;
  109.  
  110. cout<< hk()/ <<endl;
  111.  
  112. }
  113.  
  114. return ;
  115. }

Strategic Game HDU - 1054(最小顶点覆盖)的更多相关文章

  1. I - Strategic Game - hdu 1054(最小点覆盖)

    题意:用最小的点来覆盖全部的边,因为二分图里面最大的匹配就是最小覆盖,所以直接匹配一下即可 ****************************************************** ...

  2. hdu 1054(最小点覆盖集)

    Strategic Game Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  3. hdu 1054 最小点覆盖

    Sample Input 4 0:(1) 1 1:(2) 2 3 2:(0) 3:(0) 5 3:(3) 1 4 2 1:(1) 0 2:(0) 0:(0) 4:(0)   Sample Output ...

  4. HDU ACM 1054 Strategic Game 二分图最小顶点覆盖?树形DP

    分析:这里使用树形DP做. 1.最小顶点覆盖做法:最小顶点覆盖 == 最大匹配(双向图)/2. 2.树形DP: dp[i][0]表示i为根节点,而且该节点不放,所需的最少的点数. dp[i][1]表示 ...

  5. HDU - 1054 Strategic Game(二分图最小点覆盖/树形dp)

    d.一颗树,选最少的点覆盖所有边 s. 1.可以转成二分图的最小点覆盖来做.不过转换后要把匹配数除以2,这个待细看. 2.也可以用树形dp c.匈牙利算法(邻接表,用vector实现): /* 用ST ...

  6. hdu 1150 Machine Schedule(最小顶点覆盖)

    pid=1150">Machine Schedule Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/327 ...

  7. hdu1054(最小顶点覆盖)

    传送门:Strategic Game 题意:用尽量少的顶点来覆盖所有的边. 分析:最小顶点覆盖裸题,最小顶点覆盖=最大匹配数(双向图)/2. #include <cstdio> #incl ...

  8. hdu1054最小顶点覆盖

    最小定点覆盖是指这样一种情况: 图G的顶点覆盖是一个顶点集合V,使得G中的每一条边都接触V中的至少一个顶点.我们称集合V覆盖了G的边.最小顶点覆盖是用最少的顶点来覆盖所有的边.顶点覆盖数是最小顶点覆盖 ...

  9. HDU1054(KB10-H 最小顶点覆盖)

    Strategic Game Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

随机推荐

  1. jqgrid 基础应用

    jqgrid 是一个在jquery基础上做的一个表格插件,以ajax的方式和服务器端通信. 一个jqgrid的基础示例(基础参数说明)如下: $("#jqGrid").jqGrid ...

  2. 微信小程序开发 [00] 写在前面的话,疯狂唠唠

    我总是喜欢在写东西之前唠唠嗑,按照惯例会在博文的开篇写这么一段"写在前面的话",这次却为了这个唠嗑单独开了一篇文,大概预想着要胡说八道的话有点多. 前段时间突然对小程序来了兴趣,说 ...

  3. 第17章 EXTI—外部中断/事件控制器

    第17章     EXTI—外部中断/事件控制器 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.co ...

  4. 基于Python自动发送QQ群消息

    1.准备工作 此次测试基于python3,需要安装qqbot.bs4.requests库. qqbot项目地址:https://github.com/pandolia/qqbot.git pip qq ...

  5. Git与TortoiseGit基本操作

    Git与TortoiseGit基本操作 1. GitHub操作 本节先简单介绍 git 的使用与操作, 然后再介绍 TortoiseGit 的使用与操作. 先看看SVN的操作吧, 最常见的是 检出(C ...

  6. 笔记:载入viewcontroller的几种方式

    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; ...

  7. 20155202张旭 Exp4 恶意代码分析

    20155202张旭 Exp4 恶意代码分析 实验前问题回答: 一:如果在工作中怀疑一台主机上有恶意代码,但只是猜想,所有想监控下系统一天天的到底在干些什么.请设计下你想监控的操作有哪些,用什么方法来 ...

  8. 20155308《网络攻防》 Exp1 PC平台逆向破解(5)M

    20155308<网络攻防> Exp1 PC平台逆向破解(5)M 逆向及Bof基础实践说明 1.1 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是 ...

  9. 【Orleans开胃菜系列2】连接Connect源码简易分析

    [Orleans开胃菜系列2]连接Connect源码简易分析 /** * prism.js Github theme based on GitHub's theme. * @author Sam Cl ...

  10. Redis介绍及Jedis基础操作

    1.Redis简介 Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库.缓存和消息中间件. 它支持多种类型的数据结构,如 字符串(strings), 散列(hashes ...