pku 2771 Guardian of Decency

阅读: 评论:0

pku 2771 Guardian of Decency

pku 2771 Guardian of Decency

题意:就是一个保守的老师,怕同学们谈恋爱,于是他觉得这样分组是没有问题的

1.身高差距在40厘米以上

2.同性别

3.同样的音乐爱好

4.不同体育爱好

一下注释掉一段话,牢骚,之后正题

/*

话说这题真是命途多舛啊,中午没睡,困死,一看到找朋友,下意识并查集划分集合,写完后怎么也过不了样例

好吧,再读一遍题,瞬间知道是二分匹配- -|||

最后条件又忘写等号了贡献一次WA

*/

思路:题意是求最大独立集,即最大一个集合,其中任意两点之间都不存在边。求法是:最大独立集=顶点数-最大匹配数。

因为我是直接用n个人对n个人匹配的(看了下网上好多用男匹配女的),所以求出的最大匹配数要除2.

这样貌似会比男配女慢一些

/*

*/
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <climits>
#include <algorithm>
#include <functional>
#include <cstdlib>
#include <queue>
#include <vector>
#include <stack>
#include <map>
#include <cmath>
#define nMax 505
using namespace std;
map<string, int> m, s;
struct Student
{
int sport, music;
bool sex;
int high;
}stu[nMax];
bool mat[nMax][nMax], used[nMax];
int maty[nMax], n;

int path(int u)
{
int v;
for(v=0;v<n;v++)
if((mat[u][v])&&(used[v]==0)) {
used[v]=1;
if((maty[v]<0)||(path(maty[v]))) {
maty[v]=u;
return(1);
} // end of if((maty[v]...
} // end of if((mat[u][v]...
return(0);
} // end of int path()

int MaxMatch()
{
int i,ret=0;
memset(maty,-1,sizeof(maty));
for(i=0;i<n;i++){
memset(used,0,sizeof(used));
ret+=path(i);
} // end of if(matx[i]...
return(ret);
}

int main()
{
int music_cnt, sport_cnt, ntime;
scanf("%d", &ntime);
while(ntime--)
{
string sport, music;
char sex;
music_cnt=sport_cnt=1;
m.clear();
s.clear();
memset(mat, 0, sizeof(mat));

scanf("%d", &n);
for(int i=0; i<n; i++)    //输入时顺便把字符串全换成数字
{
cin>>stu[i].high>>sex>>music>>sport;

if(sex=='M') stu[i].sex=1;
else stu[i].sex=0;
if(m[music]==0) m[music]=music_cnt++;
if(s[sport]==0) s[sport]=sport_cnt++;
stu[i].sport=s[sport];
stu[i].music=m[music];
//cout<<m[music]<<" "<<s[sport]<<endl;
}
for(int i=0; i<n; i++)
{
for(int j=0; j<n; j++)
{
if(i==j) continue;
int h=abs(stu[i].high-stu[j].high);
if(stu[i].sex!=stu[j].sex && h<=40 && stu[i].music==stu[j].music && stu[i].sport!=stu[j].sport)
{
mat[i][j]=1;
}
}
}
printf("%dn", n-MaxMatch()/2);
}
return 0;
}

 

转载于:.html

本文发布于:2024-01-31 11:58:48,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170667353128359.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:pku   Decency   Guardian
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23