Guardian of Decency UVALive - 3415 最大独立集=结点数-最大匹配数 老师带大学生旅游
- /**
- 题目:Guardian of Decency UVALive - 3415 最大独立集=结点数-最大匹配数 老师带大学生旅游
- 链接:https://vjudge.net/problem/UVALive-3415
- 题意:老师带学生去旅游,要求从n个学生中选出一些学生,满足任意两个学生至少要满足下面的四条中的一条。
- 1,身高相差大于40cm
- 2,性别相同
- 3,最喜欢的音乐不同类型
- 4,最喜欢的体育比赛相同类型
- 输出可以挑选的最多学生人数。
- 思路:最大独立集做法。
- 选出来的学生必须满足上面四个条件至少一个。
- 那么如果两个学生都不满足上面的条件,则最多只能从中选一个人。
- 所以:如果学生a和学生b不满足上面的条件,那么连一条边,题目要求选的学生中,任意两个学生不能有边相连。
- 这就是最大独立集(选择尽量多的结点,使得任意一条边的两个端点不会同时被选中)问题。
- 处理:左边编号为1~n的学生,右边也是编号1~n的学生,相同编号的学生不连边,如果学生a和学生b不满足上面的条件,那么连一条边。
- 由于令x为左边的学生编号,y为右边的学生编号(x!=y)
- 如果x与y连边,那么y与x也会连一条边,所以边数多了一倍。
- 那么最大匹配数也会多一倍。
- 本题结果:ans = N-最大匹配数/2:
- 最大独立集=结点数-最大匹配数。
- */
- #include<iostream>
- #include<cstdio>
- #include<algorithm>
- #include<map>
- #include<vector>
- #include<queue>
- #include<set>
- #include<cstring>
- using namespace std;
- const int MAXN = ;
- int f[MAXN][MAXN];
- int vit[MAXN], S[MAXN], T[MAXN];
- int N;
- ///模板
- bool Find(int x)///走交替路,寻找增广路
- {
- for(int i = ; i <= N; i++){///n表示右侧点数。
- if(f[x][i]&&vit[i]==){
- vit[i] = ;
- if(T[i]==||Find(T[i])){
- T[i] = x;///右边第i个点和左边第x个点匹配成功。
- S[x] = i;///左边第x个点和右边第i个点匹配成功。
- return true;
- }
- }
- }
- return false;
- }
- struct node
- {
- int h;
- char sex[];
- char music[];
- char sport[];
- }stu[MAXN];
- int main()
- {
- int n, m, k;
- cin>>k;
- while(k--){
- scanf("%d",&n);
- N = n;
- memset(f, , sizeof f);
- for(int i = ; i <= n; i++){
- scanf("%d%s%s%s",&stu[i].h,stu[i].sex,stu[i].music,stu[i].sport);
- }
- for(int i = ; i <= n; i++){///每条边都重复了一次。对称。最终匹配数要对半;
- for(int j = ; j <= n; j++){
- if(i==j) continue;
- 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)!=){//都不满足
- f[i][j] = ;
- }
- }
- }
- int ans = ;
- memset(T, , sizeof T);
- memset(S, , sizeof S);
- ///模板
- for(int i = ; i <= N; i++){
- memset(vit, , sizeof vit);
- if(Find(i)) ans++;
- }
- printf("%d",N-ans/);
- printf("\n");
- }
- return ;
- }
Guardian of Decency UVALive - 3415 最大独立集=结点数-最大匹配数 老师带大学生旅游的更多相关文章
- Guardian of Decency UVALive - 3415(最大独立集板题)
老师在选择一些学生做活动时,为避免学生发生暧昧关系,就提出了四个要求.在他眼中,只要任意两个人符合这四个要求之一,就不可能发生暧昧.现在给出n个学生关于这四个要求的信息,求老师可以挑选出的最大学生数量 ...
- HDU 1068 Girls and Boys(最大独立集合 = 顶点数 - 最大匹配数)
HDU 1068 :题目链接 题意:一些男孩和女孩,给出一些人物关系,然后问能找到最多有多少个人都互不认识. 转换一下:就是大家都不认识的人,即最大独立集合 #include <iostream ...
- HDU 4160 Dolls (最小路径覆盖=顶点数-最大匹配数)
Dolls Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submiss ...
- POJ 2771 Guardian of Decency(最大独立集数=顶点数-最大匹配数)
题目链接: http://poj.org/problem?id=2771 Description Frank N. Stein is a very conservative high-school t ...
- 训练指南 UVALive - 3415(最大点独立集)
layout: post title: 训练指南 UVALive - 3415(最大点独立集) author: "luowentaoaa" catalog: true mathja ...
- poj——2771 Guardian of Decency
poj——2771 Guardian of Decency Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 5916 ...
- poj 2771 Guardian of Decency 解题报告
题目链接:http://poj.org/problem?id=2771 题目意思:有一个保守的老师要带他的学生来一次短途旅行,但是他又害怕有些人会变成情侣关系,于是就想出了一个方法: 1.身高差距 ...
- poj 2771 Guardian of Decency(最大独立数)
题意:人与人之间满足4个条件之一即不能成为一对(也就说这4个条件都不满足才能成为一对),求可能的最多的单身人数. 思路:把男女分为两部分,接下来就是二分图的匹配问题.把能成为一对的之间连边,然后求出最 ...
- UVALive 3415 Guardian of Decency(二分图的最大独立集)
题意:老师在选择一些学生做活动时,为避免学生发生暧昧关系,就提出了四个要求.在他眼中,只要任意两个人符合这四个要求之一,就不可能发生暧昧.现在给出n个学生关于这四个要求的信息,求老师可以挑选出的最大学 ...
随机推荐
- 线程局部存储(TLS)
线程局部存储(TLS) 2011-10-11 09:59:28| 分类: Win32---API | 标签:tls |举报 |字号 订阅 什么是线程局部存储 众所周知,线程是执行的单元,同 ...
- java中return的作用
脑补一下基础的东西,return的用法. return的常用作用有以下两种第一种用法是返回参数所用的关键字,假如一个有返回值的方法执行完了之后需要返回一个参数,示例: public string fu ...
- Appium处理滑动方法是swipe
滑动API:Swipe(int start x,int start y,int end x,int y,duration) 解释: int start x-开始滑动的x坐标:int start y - ...
- 畅通project(杭电1232)
畅通project Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total ...
- Android 歌词显示
一.概述 项目中设计到歌词显示的问题,这一块之前没有涉及过,只是套用过一个开源的项目,效果还行,于是想到拿来稍作修改,以适应项目需求. 二.歌词控件 先来看下这个自定义控件写的歌词控件吧: publi ...
- TI BSL in python
今天花了一下午在这个上面,被这个工具整没脾气了快.花点功夫记录一下. 代码是在linux下下过来的: bzr branch lp:python-msp430-tools 看了下,有我想要的器件.然后想 ...
- linux 安装mysql 5.6.11
tar zxvf mysql-.tar.gz cd mysql- cmake . -DCMAKE_INSTALL_PREFIX=/home/mysql/ -DMYSQL_DATADIR=/home/m ...
- ES6 编程风格
1.块级作用域 (1)使用let代替var 好处:变量应该只在其声明的代码块内有效:var命令存在变量提升效用,let命令没有这个问题. (2)全局常量 在let和const之间,建议优先使用cons ...
- Android源码-SignApk.java
/* * Copyright (C) 2008 The Android Open Source Project * * Licensed under the Apache License, Versi ...
- Keepalived+nginx+redis主从+tomcat一机多实例实现会话共享
Keepalived+nginx+redis主从+tomcat一机多实例实现会话共享 2014-09-09 14:14:25 标签:会话共享 主从 原创作品,允许转载,转载时请务必以超链接形式标明文章 ...