题意:

有一个老师想组织学生出去旅游,为了避免他们之间有情侣产生,他制定了一系列的条件,满足这些条件之一,那么这些人理论上就不会成为情侣:

身高相差40cm;性别相同;喜欢的音乐风格不同;最喜欢的运动相同。

给出若干个学生的身高,性别,喜欢的音乐风格和喜欢的运动,问最多有多少人可以出去。

思路:

对于两个人,如果以上所有条件都不满足,那么就在他们之间连边,说明他们不能同时去。

问题就转化成了求一个二分图的最大独立集。(独立集是两两之间不存在边的点的集合,最大顾名思义)

最大独立集 = 点数- 最小点覆盖  = 点数 – 最大匹配

匈牙利算法,复杂度O(n^3)。

代码:

  1. #include <stdio.h>
  2. #include <iostream>
  3. #include <string>
  4. #include <string.h>
  5. #include <vector>
  6. using namespace std;
  7.  
  8. const int N = ;
  9.  
  10. vector<int> g[N];
  11. int link[N];
  12. bool vis[N];
  13.  
  14. struct node
  15. {
  16. int hei;
  17. string sex,music,sport;
  18.  
  19. node(int a,string b,string c,string d)
  20. {
  21. hei = a;
  22. sex = b;
  23. music = c;
  24. sport = d;
  25. }
  26. };
  27.  
  28. vector<node> ns;
  29.  
  30. bool dfs(int u)
  31. {
  32. for (int i = ;i < g[u].size();i++)
  33. {
  34. int v = g[u][i];
  35.  
  36. if (!vis[v])
  37. {
  38. vis[v] = ;
  39.  
  40. if (link[v] == - || dfs(link[v]))
  41. {
  42. link[v] = u;
  43. link[u] = v;
  44.  
  45. return true;
  46. }
  47. }
  48. }
  49.  
  50. return false;
  51. }
  52. int solve(int n)
  53. {
  54. int cnt = ;
  55.  
  56. memset(link,-,sizeof(link));
  57.  
  58. for (int i = ;i < n;i++)
  59. {
  60. if (link[i] == -)
  61. {
  62. memset(vis,,sizeof(vis));
  63. if (dfs(i)) cnt++;
  64. }
  65. }
  66.  
  67. return cnt;
  68. }
  69.  
  70. int mabs(int x)
  71. {
  72. return x >= ? x : -x;
  73. }
  74.  
  75. int main()
  76. {
  77. int t;
  78.  
  79. scanf("%d",&t);
  80.  
  81. while (t--)
  82. {
  83. int n;
  84.  
  85. scanf("%d",&n);
  86.  
  87. ns.clear();
  88.  
  89. for (int i = ;i < n;i++)
  90. {
  91. g[i].clear();
  92. int a;
  93. string b,c,d;
  94.  
  95. cin >> a >> b >> c >> d;
  96.  
  97. ns.push_back(node(a,b,c,d));
  98. }
  99.  
  100. for (int i = ;i < n;i++)
  101. {
  102. for (int j = i + ;j < n;j++)
  103. {
  104. bool f = ;
  105.  
  106. if (mabs(ns[i].hei - ns[j].hei) > ) f = ;
  107. if (ns[i].sex == ns[j].sex) f = ;
  108. if (ns[i].music != ns[j].music) f = ;
  109. if (ns[i].sport == ns[j].sport) f = ;
  110.  
  111. if (!f)
  112. {
  113. g[i].push_back(j);
  114. g[j].push_back(i);
  115. }
  116. }
  117. }
  118.  
  119. int ans = solve(n);
  120.  
  121. printf("%d\n",n - ans);
  122. }
  123.  
  124. return ;
  125. }

uvalive 3415 Guardian Of Decency的更多相关文章

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

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

  2. Guardian of Decency UVALive - 3415 最大独立集=结点数-最大匹配数 老师带大学生旅游

    /** 题目:Guardian of Decency UVALive - 3415 最大独立集=结点数-最大匹配数 老师带大学生旅游 链接:https://vjudge.net/problem/UVA ...

  3. Guardian of Decency(二分图)

    Guardian of Decency Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Submi ...

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

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

  5. POJ 2771 Guardian of Decency 【最大独立集】

    传送门:http://poj.org/problem?id=2771 Guardian of Decency Time Limit: 3000MS   Memory Limit: 65536K Tot ...

  6. POJ 2771 Guardian of Decency (二分图最大点独立集)

    Guardian of Decency Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 6133   Accepted: 25 ...

  7. uva 12083 Guardian of Decency (二分图匹配)

    uva 12083 Guardian of Decency Description Frank N. Stein is a very conservative high-school teacher. ...

  8. poj——2771 Guardian of Decency

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

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

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

随机推荐

  1. multiDex分包时指定主dex的class列表

    在gradle中我们使用了如下代码可以将指定类型分配到主dex中: afterEvaluate { tasks.matching { it.name.startsWith('dex') }.each ...

  2. 实验四 Android程序设计

    20155224 实验四 Android程序设计 实验报告 实验报告封面: 课程:Java程序设计 班级:1652班 姓名:王高源 学号:20165225 指导教师:娄嘉鹏 实验日期:2018年5月1 ...

  3. linux链接库的理解

    前段时间遇到个奇怪的问题,经调试是由于可执行程序A编译时使用的libssl.so.1.1及对应版本头文件,A链接的库libtest.so编译时使用的libssl.so.1.0及对应版本头文件,执行时l ...

  4. codechef Sum of Cubes 图论

    正解:图论+数学 解题报告: 先放个传送门QwQ 然后放下题目大意?就说给定简单图,无自环或重边,然后求(∑e[i][j])k,i,j∈S,S为点集的子集 然后因为k的取值只有[1,3],所以这里分类 ...

  5. 深入了解HBASE架构(转)

    dd by zhj: 最近的工作需要跟HBase打交道,所以花时间把<HBase权威指南>粗略看了一遍,感觉不过瘾,又从网上找了几篇经典文章. 下面这篇就是很经典的文章,对HBase的架构 ...

  6. es6原型的继承

    class Parent { name = 'liangcheng'; } const parent = new Parent(); console.log(parent); // 类继承某实例对象属 ...

  7. VS2013 opencv配置

    有三个地方需要配置,在配置之前首先要将platform配置好,下面的例子是x64 Release的“ 然后需要将include.lib的路径配置好 然后将dll拷贝至编译生成的Release文件夹中即 ...

  8. root用户远程登录Ubuntu

    安装了一台Ubuntu的服务器,由于大家都需要使用,因此创建了多个用户,多台windows机器用过Putty远程登录,但是默认情况下创建的用户都是普通用户,也就是说很多root用户能够使用的权限以及命 ...

  9. 基于fiddler实现本地代理完成脚本测试

    配置好fiddler以后,具体操作流程如下: 1.找到后在右边点击AutoResponder,查看,默认情况如下 勾选 2.ctrl+F 搜索 app. 关键字 ,找到后拖到右侧 3.替换本地文件 4 ...

  10. 20190223 Hadoop生态圈,关于大数据

    周六参加了一场,大数据基础培训,讲得比较详细.培训的讲师对于互联网行业职位萎缩也有相对的解释,也还介绍了新的职位的诞生. 以前对于大数据的理解,就是超大的数据量,但对大数据开发不甚了解. 大数据平台的 ...