题意很简单,在一颗树上找最小点覆盖。

将树染成黑白两色,构成一张二分图,然后最大匹配==最小点覆盖即可,所以一次匈牙利就可以求出来了

hdu1054

  1. #include <iostream>
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <math.h>
  5. #include <algorithm>
  6. #include <string>
  7. #include <queue>
  8. #include <vector>
  9. #include <stdlib.h>
  10. using namespace std;
  11. #define N 1505
  12.  
  13. int n;
  14. struct node
  15. {
  16. int to,next;
  17. }edge[N*];
  18.  
  19. vector<int>g[N];
  20.  
  21. int pre[N],cnt;
  22. int cao[N],a[N],b[N];
  23. int cnta,cntb;
  24. int mark[N],frt[N];
  25.  
  26. void add_edge(int u,int v)
  27. {
  28. edge[cnt].to=v;
  29. edge[cnt].next=pre[u];
  30. pre[u]=cnt++;
  31. }
  32.  
  33. void Dfs(int s,int fr,int flag)
  34. {
  35. if(flag==)
  36. {
  37. cao[s]=cnta;
  38. a[cnta]=s;
  39. cnta++;
  40. }else
  41. {
  42. cao[s]=cntb;
  43. b[cntb]=s;
  44. cntb++;
  45. }
  46. for(int p=pre[s];p!=-;p=edge[p].next)
  47. {
  48. int v=edge[p].to;
  49. if(v==fr) continue;
  50. Dfs(v,s,flag^);
  51. }
  52. }
  53.  
  54. int dfs(int s)
  55. {
  56. for(int i=;i<g[s].size();i++)
  57. {
  58. int v=g[s][i];
  59. if(mark[v]==) continue;
  60. mark[v]=;
  61. if(frt[v]==-||dfs(frt[v]))
  62. {
  63. frt[v]=s;
  64. return ;
  65. }
  66. }
  67. return ;
  68. }
  69.  
  70. int main()
  71. {
  72. while(scanf("%d",&n)!=EOF)
  73. {
  74. cnt=;
  75. memset(pre,-,sizeof(pre));
  76. for(int i=;i<n;i++)
  77. {
  78. int x;
  79. scanf("%d",&x);
  80. int num;
  81. scanf(":(%d)",&num);
  82. for(int j=;j<num;j++)
  83. {
  84. int y;
  85. scanf("%d",&y);
  86. add_edge(x,y);
  87. add_edge(y,x);
  88. }
  89. }
  90. //然后就是染色了
  91. cnta=; cntb=;
  92. Dfs(,-,);
  93. //然后再建一张图
  94. for(int i=;i<cnta;i++)
  95. {
  96. g[i].clear();
  97. for(int p=pre[a[i]];p!=-;p=edge[p].next)
  98. {
  99. int v=edge[p].to;
  100. g[i].push_back(cao[v]);
  101. }
  102. }
  103. int ans=;
  104. memset(frt,-,sizeof(frt));
  105. for(int i=;i<cnta;i++)
  106. {
  107. memset(mark,,sizeof(mark));
  108. ans+=dfs(i);
  109. }
  110. printf("%d\n",ans);
  111. }
  112. return ;
  113. }

hdu1054(二分图匹配)的更多相关文章

  1. UVA 12549 - 二分图匹配

    题意:给定一个Y行X列的网格,网格种有重要位置和障碍物.要求用最少的机器人看守所有重要的位置,每个机器人放在一个格子里,面朝上下左右四个方向之一发出激光直到射到障碍物为止,沿途都是看守范围.机器人不会 ...

  2. POJ 1274 裸二分图匹配

    题意:每头奶牛都只愿意在她们喜欢的那些牛栏中产奶,告诉每头奶牛愿意产奶的牛棚编号,求出最多能分配到的牛栏的数量. 分析:直接二分图匹配: #include<stdio.h> #includ ...

  3. BZOJ1433 ZJOI2009 假期的宿舍 二分图匹配

    1433: [ZJOI2009]假期的宿舍 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2375  Solved: 1005[Submit][Sta ...

  4. HDU1281-棋盘游戏-二分图匹配

    先跑一个二分图匹配,然后一一删去匹配上的边,看能不能达到最大匹配数,不能这条边就是重要边 /*----------------------------------------------------- ...

  5. HDU 1083 网络流之二分图匹配

    http://acm.hdu.edu.cn/showproblem.php?pid=1083 二分图匹配用得很多 这道题只需要简化的二分匹配 #include<iostream> #inc ...

  6. hdu 5727 Necklace dfs+二分图匹配

    Necklace/center> 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5727 Description SJX has 2*N mag ...

  7. BZOJ 1059 & 二分图匹配

    题意: 判断一个黑白染色的棋盘能否通过交换行或列使对角线上都是黑色. SOL: 真是有点醉...这种问题要么很神要么很水...第一眼感觉很水但就是不造怎么做...想了10分钟怎么感觉就是判断个数够不够 ...

  8. 【POJ 3020】Antenna Placement(二分图匹配)

    相当于用1*2的板覆盖给定的h*w的格子里的点,求最少的板.可以把格子相邻的分成两个集合,如下图,0为一个集合,1的为一个,也就是(行数+列数)为奇数的是一个集合,为偶数的为另一个集合.1010101 ...

  9. BZOJ-1143&&BZOJ-2718 祭祀river&&毕业旅行 最长反链(Floyed传递闭包+二分图匹配)

    蛋蛋安利的双倍经验题 1143: [CTSC2008]祭祀river Time Limit: 10 Sec Memory Limit: 162 MB Submit: 1901 Solved: 951 ...

随机推荐

  1. JavaScript之工厂方式 构造函数方式 原型方式讲解

    一.工厂方式可以为一个对象,创建多个实例. var oCar = new Object; oCar.color = "red"; oCar.doors=4; oCar.mpg=23 ...

  2. 较复杂js的书写格式

    我们看较复杂的js程序最怕结构混乱,一个好的js书写结构,在很大程度上可以减缓阅读的障碍性. 我感觉一个良好的结构要有两点:一是要有一个统一的入口,这样就保证了程序的可阅读性:二是要能够灵活的设置参数 ...

  3. ios 5

    1.屏幕尺寸568×2/320×2  需要一张568h@2x.png的图片. 2.iOS5不支持udid,用uuid替代,取得uuid方法: -(NSString*) uuid { CFUUIDRef ...

  4. ASP.NET制作一个简单的等待窗口

    前一阵做一个项目,在处理报表的时候时间偏长,客户提出要做出一个等待窗口提示用户等待(页面太久没反映,用户还以为死了呢).在分析这一需求之后,觉得如果要实现像winform应用中的processbar太 ...

  5. 你用什么工具开发JavaScript?

    Cloud9的CFO曾经在LinkedIn上面发起一个调查,原标题为:What tools do you use for Node.js development?,回贴者甚多. 目测很多人都使用VIM ...

  6. 使用 Microsoft Word 发布博客文章

    以 Microsoft Word 2010 为例: 依次选择:文件 -> 保存并发送 -> 发布为博客文章 配置说明:新建账户 的 博客文章 URL  一栏填写 http://rpc.cn ...

  7. 安装hbase-0.98.9-hadoop2

    1. download http://124.202.164.13/files/1244000005C563FC/www.eu.apache.org/dist/hbase/stable/hbase-0 ...

  8. DirectShow学习笔记

    DirectShow, as you might have guessed, is a COM based multimedia framework that makes the task of ca ...

  9. js调试-定位到函数所在文件位置

    原文:http://www.cnblogs.com/52cik/p/js-console-show-source.html 在控制台输入要查找的函数名如votePost 然后回车: 函数源码粗显啦,并 ...

  10. JSON.stringify 函数 (JavaScript)

    在bsrck项目中,使用jQuery.Form.js的ajaxSubmit时,遇到有文件上传的form提交,在firefox和chrome浏览器中测试,报Bad Request的错误,经查代码后发现是 ...