1. /**
  2. 题目:Guardian of Decency UVALive - 3415 最大独立集=结点数-最大匹配数 老师带大学生旅游
  3. 链接:https://vjudge.net/problem/UVALive-3415
  4. 题意:老师带学生去旅游,要求从n个学生中选出一些学生,满足任意两个学生至少要满足下面的四条中的一条。
  5. 1,身高相差大于40cm
  6. 2,性别相同
  7. 3,最喜欢的音乐不同类型
  8. 4,最喜欢的体育比赛相同类型
  9.  
  10. 输出可以挑选的最多学生人数。
  11.  
  12. 思路:最大独立集做法。
  13. 选出来的学生必须满足上面四个条件至少一个。
  14. 那么如果两个学生都不满足上面的条件,则最多只能从中选一个人。
  15.  
  16. 所以:如果学生a和学生b不满足上面的条件,那么连一条边,题目要求选的学生中,任意两个学生不能有边相连。
  17. 这就是最大独立集(选择尽量多的结点,使得任意一条边的两个端点不会同时被选中)问题。
  18.  
  19. 处理:左边编号为1~n的学生,右边也是编号1~n的学生,相同编号的学生不连边,如果学生a和学生b不满足上面的条件,那么连一条边。
  20. 由于令x为左边的学生编号,y为右边的学生编号(x!=y)
  21. 如果x与y连边,那么y与x也会连一条边,所以边数多了一倍。
  22. 那么最大匹配数也会多一倍。
  23. 本题结果:ans = N-最大匹配数/2:
  24.  
  25. 最大独立集=结点数-最大匹配数。
  26.  
  27. */
  28.  
  29. #include<iostream>
  30. #include<cstdio>
  31. #include<algorithm>
  32. #include<map>
  33. #include<vector>
  34. #include<queue>
  35. #include<set>
  36. #include<cstring>
  37. using namespace std;
  38. const int MAXN = ;
  39. int f[MAXN][MAXN];
  40. int vit[MAXN], S[MAXN], T[MAXN];
  41. int N;
  42. ///模板
  43. bool Find(int x)///走交替路,寻找增广路
  44. {
  45. for(int i = ; i <= N; i++){///n表示右侧点数。
  46. if(f[x][i]&&vit[i]==){
  47. vit[i] = ;
  48. if(T[i]==||Find(T[i])){
  49. T[i] = x;///右边第i个点和左边第x个点匹配成功。
  50. S[x] = i;///左边第x个点和右边第i个点匹配成功。
  51. return true;
  52. }
  53. }
  54. }
  55. return false;
  56. }
  57. struct node
  58. {
  59. int h;
  60. char sex[];
  61. char music[];
  62. char sport[];
  63. }stu[MAXN];
  64. int main()
  65. {
  66. int n, m, k;
  67. cin>>k;
  68. while(k--){
  69. scanf("%d",&n);
  70. N = n;
  71. memset(f, , sizeof f);
  72. for(int i = ; i <= n; i++){
  73. scanf("%d%s%s%s",&stu[i].h,stu[i].sex,stu[i].music,stu[i].sport);
  74. }
  75. for(int i = ; i <= n; i++){///每条边都重复了一次。对称。最终匹配数要对半;
  76. for(int j = ; j <= n; j++){
  77. if(i==j) continue;
  78. if(abs(stu[i].h-stu[j].h)<=&&stu[i].sex[]!=stu[j].sex[]&&strcmp(stu[i].music,stu[j].music)==&&strcmp(stu[i].sport,stu[j].sport)!=){//都不满足
  79. f[i][j] = ;
  80. }
  81. }
  82. }
  83.  
  84. int ans = ;
  85. memset(T, , sizeof T);
  86. memset(S, , sizeof S);
  87. ///模板
  88. for(int i = ; i <= N; i++){
  89. memset(vit, , sizeof vit);
  90. if(Find(i)) ans++;
  91. }
  92. printf("%d",N-ans/);
  93. printf("\n");
  94. }
  95. return ;
  96. }

Guardian of Decency UVALive - 3415 最大独立集=结点数-最大匹配数 老师带大学生旅游的更多相关文章

  1. Guardian of Decency UVALive - 3415(最大独立集板题)

    老师在选择一些学生做活动时,为避免学生发生暧昧关系,就提出了四个要求.在他眼中,只要任意两个人符合这四个要求之一,就不可能发生暧昧.现在给出n个学生关于这四个要求的信息,求老师可以挑选出的最大学生数量 ...

  2. HDU 1068 Girls and Boys(最大独立集合 = 顶点数 - 最大匹配数)

    HDU 1068 :题目链接 题意:一些男孩和女孩,给出一些人物关系,然后问能找到最多有多少个人都互不认识. 转换一下:就是大家都不认识的人,即最大独立集合 #include <iostream ...

  3. HDU 4160 Dolls (最小路径覆盖=顶点数-最大匹配数)

    Dolls Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submiss ...

  4. POJ 2771 Guardian of Decency(最大独立集数=顶点数-最大匹配数)

    题目链接: http://poj.org/problem?id=2771 Description Frank N. Stein is a very conservative high-school t ...

  5. 训练指南 UVALive - 3415(最大点独立集)

    layout: post title: 训练指南 UVALive - 3415(最大点独立集) author: "luowentaoaa" catalog: true mathja ...

  6. poj——2771 Guardian of Decency

    poj——2771    Guardian of Decency Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 5916   ...

  7. poj 2771 Guardian of Decency 解题报告

    题目链接:http://poj.org/problem?id=2771 题目意思:有一个保守的老师要带他的学生来一次短途旅行,但是他又害怕有些人会变成情侣关系,于是就想出了一个方法: 1.身高差距   ...

  8. poj 2771 Guardian of Decency(最大独立数)

    题意:人与人之间满足4个条件之一即不能成为一对(也就说这4个条件都不满足才能成为一对),求可能的最多的单身人数. 思路:把男女分为两部分,接下来就是二分图的匹配问题.把能成为一对的之间连边,然后求出最 ...

  9. UVALive 3415 Guardian of Decency(二分图的最大独立集)

    题意:老师在选择一些学生做活动时,为避免学生发生暧昧关系,就提出了四个要求.在他眼中,只要任意两个人符合这四个要求之一,就不可能发生暧昧.现在给出n个学生关于这四个要求的信息,求老师可以挑选出的最大学 ...

随机推荐

  1. 线程局部存储(TLS)

    线程局部存储(TLS) 2011-10-11 09:59:28|  分类: Win32---API |  标签:tls   |举报 |字号 订阅   什么是线程局部存储 众所周知,线程是执行的单元,同 ...

  2. java中return的作用

    脑补一下基础的东西,return的用法. return的常用作用有以下两种第一种用法是返回参数所用的关键字,假如一个有返回值的方法执行完了之后需要返回一个参数,示例: public string fu ...

  3. Appium处理滑动方法是swipe

    滑动API:Swipe(int start x,int start y,int end x,int y,duration) 解释: int start x-开始滑动的x坐标:int start y - ...

  4. 畅通project(杭电1232)

    畅通project Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total ...

  5. Android 歌词显示

    一.概述 项目中设计到歌词显示的问题,这一块之前没有涉及过,只是套用过一个开源的项目,效果还行,于是想到拿来稍作修改,以适应项目需求. 二.歌词控件 先来看下这个自定义控件写的歌词控件吧: publi ...

  6. TI BSL in python

    今天花了一下午在这个上面,被这个工具整没脾气了快.花点功夫记录一下. 代码是在linux下下过来的: bzr branch lp:python-msp430-tools 看了下,有我想要的器件.然后想 ...

  7. linux 安装mysql 5.6.11

    tar zxvf mysql-.tar.gz cd mysql- cmake . -DCMAKE_INSTALL_PREFIX=/home/mysql/ -DMYSQL_DATADIR=/home/m ...

  8. ES6 编程风格

    1.块级作用域 (1)使用let代替var 好处:变量应该只在其声明的代码块内有效:var命令存在变量提升效用,let命令没有这个问题. (2)全局常量 在let和const之间,建议优先使用cons ...

  9. Android源码-SignApk.java

    /* * Copyright (C) 2008 The Android Open Source Project * * Licensed under the Apache License, Versi ...

  10. Keepalived+nginx+redis主从+tomcat一机多实例实现会话共享

    Keepalived+nginx+redis主从+tomcat一机多实例实现会话共享 2014-09-09 14:14:25 标签:会话共享 主从 原创作品,允许转载,转载时请务必以超链接形式标明文章 ...