首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

poj1719 - Shooting Contest

  • 24-03-05 07:01
  • 3198
  • 6306
blog.csdn.net

                                  想看更多的解题报告: http://iyenn.com/rec/1824570.html
                                  转载请注明出处:http://blog.csdn.net/wangjian8006

题目大意:给你一个r*c的矩阵,然后这个矩阵每一列有两个格子是白色的,然后你在每列上开一枪,可以打这列的任意的白色格子,问你打到的格子所在的行数是不是包括所有行了,如果包括所有行输出你在1-c列打抢的格子的行,当然这可以是不唯一的,

如果打不到就输出NO
题目首先给出有几组数据,对于每组数据第一行代表r和c,接下来c行有两个数,代表这行的哪两列是白色格子

 

解题思路:和以前那个经典的二分匹配差不多,就是在一行打一枪可以消灭所有行那个题目,很容易想到二分匹配,我们将白色格子的行指向列,然后求最大匹配,用行去匹配列,看是否能够得到的匹配数是r,如果是r的话则代表所有的行都可以被打到,然后每列对应的行,如果匹配数不是r就输出NO
当然有特例,如果r>c,这种情况开c抢根本不可能达到r行,所以直接输出NO

 

  1. /*
  2. Memory 1172K
  3. Time 47MS
  4. */
  5. #include
  6. using namespace std;
  7. #define MAXV 1010
  8. int r,c;
  9. bool map[MAXV][MAXV],use[MAXV];
  10. int vx[MAXV],vy[MAXV];
  11. bool dfs(int x){
  12. int i;
  13. for(i=1;i<=c;i++){
  14. if(map[x][i] && !use[i]){
  15. use[i]=1;
  16. if(vy[i]==-1 || dfs(vy[i])){
  17. vy[i]=x;
  18. vx[x]=i;
  19. return true;
  20. }
  21. }
  22. }
  23. return false;
  24. }
  25. int hungary(){
  26. int i,num=0;
  27. memset(vx,-1,sizeof(vx));
  28. memset(vy,-1,sizeof(vy));
  29. for(i=1;i<=r;i++){
  30. if(vx[i]==-1){
  31. memset(use,0,sizeof(use));
  32. if(dfs(i)) num++;
  33. }
  34. }
  35. return num;
  36. }
  37. int main(){
  38. int i,a,b,Case,j;
  39. scanf("%d",&Case);
  40. while(Case--){
  41. scanf("%d%d",&r,&c);
  42. memset(map,0,sizeof(map));
  43. for(i=1;i<=c;i++){
  44. scanf("%d%d",&a,&b);
  45. map[a][i]=1;
  46. map[b][i]=1;
  47. }
  48. if(chungary()!=r){
  49. printf("NO\n");
  50. }else{
  51. for(j = 1;j <= c;j++)
  52. if(vy[j] != -1)
  53. printf("%d ",vy[j]);
  54. else
  55. for(i=1;i<=r;i++)
  56. if(map[i][j]){
  57. printf("%d ",i);
  58. break;
  59. }
  60. printf("\n");
  61. }
  62. }
  63. return 0;
  64. }

注:本文转载自blog.csdn.net的wangjian8006的文章"http://blog.csdn.net/wangjian8006/article/details/7977710"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top