POJ 2771 最大点独立集
这是经典的最大点独立集
还是可以转化成最大匹配数,为什么呢,因为求出最大匹配数之和,匹配的边的两个端点互斥,只能去一个,所以最后结果就用总点数-最大匹配数即可
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int h[],sex[];
char music[][],ball[][];
int d[][],vis[],lefts[];
int n;
bool match(int u)
{
for (int v=;v<n;v++){
if (d[u][v] && !vis[v]){
vis[v]=;
if (lefts[v]==- || match(lefts[v])){
lefts[v]=u;
return true;
}
}
}
return false;
}
int main()
{
int t;
char tmp[];
scanf("%d",&t);
while (t--)
{
scanf("%d",&n);
for (int i=;i<n;i++){
scanf("%d%s%s%s",&h[i],tmp,music[i],ball[i]);
if (tmp[]=='M') sex[i]=;
else sex[i]=;
}
memset(d,,sizeof d);
for (int i=;i<n;i++)
for (int j=i+;j<n;j++){
if (abs(h[i]-h[j])<= && (sex[i]^sex[j]) && strcmp(music[i],music[j])== && strcmp(ball[i],ball[j])!=){
if (sex[i]==) d[i][j]=;
else d[j][i]=;
}
}
int sum=;
memset(lefts,-,sizeof lefts);
for (int i=;i<n;i++){
memset(vis,,sizeof vis);
if (match(i)) sum++;
}
int ans=n-sum;
printf("%d\n",ans);
}
return ;
}
这个题目也可以不把男女生分开建图(上面我区分了男女,把男的放在左边) 全部统一建图,求出来的匹配数/2即可,原因很简单,其实就是统一建图就是把上面的图左右反过来又加在原图一下,所以匹配数是实际的两倍
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int h[],sex[];
char music[][],ball[][];
int d[][],vis[],lefts[];
int n;
bool match(int u)
{
for (int v=;v<n;v++){
if (d[u][v] && !vis[v]){
vis[v]=;
if (lefts[v]==- || match(lefts[v])){
lefts[v]=u;
return true;
}
}
}
return false;
}
int main()
{
int t;
char tmp[];
scanf("%d",&t);
while (t--)
{
scanf("%d",&n);
for (int i=;i<n;i++){
scanf("%d%s%s%s",&h[i],tmp,music[i],ball[i]);
if (tmp[]=='M') sex[i]=;
else sex[i]=;
}
memset(d,,sizeof d);
for (int i=;i<n;i++)
for (int j=i+;j<n;j++){
if (abs(h[i]-h[j])<= && (sex[i]^sex[j]) && strcmp(music[i],music[j])== && strcmp(ball[i],ball[j])!=){
d[i][j]=d[j][i]=;
// cout<<h[i]<<" "<<h[j]<<endl;
// cout<<i<<" is connect "<<j<<endl;
}
else d[i][j]=d[j][i]=;
}
int sum=;
memset(lefts,-,sizeof lefts);
for (int i=;i<n;i++){
memset(vis,,sizeof vis);
if (match(i)) sum++;
}
//cout<<sum<<endl;
int ans=n-sum/;
printf("%d\n",ans);
}
return ;
}
POJ 2771 最大点独立集的更多相关文章
- POJ 2771 Guardian of Decency(求最大点独立集)
该题反过来想:将所有可能发生恋爱关系的男女配对,那么可以带出去的人数应该等于这个二分图的最大独立集 先要做一下预处理,把不符合要求的双方先求出来, company[i][j]表示i.j四个标准都不符合 ...
- POJ 2771 Guardian of Decency (二分图最大点独立集)
Guardian of Decency Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 6133 Accepted: 25 ...
- 【POJ】1419:Graph Coloring【普通图最大点独立集】【最大团】
Graph Coloring Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 5775 Accepted: 2678 ...
- POJ 3692:Kindergarten 求补图的最大点独立集 头一次接触这样的做法
Kindergarten Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 5884 Accepted: 2877 Desc ...
- LightOJ1171 Knights in Chessboard (II)(二分图最大点独立集)
题目 Source http://www.lightoj.com/volume_showproblem.php?problem=1171 Description Given an m x n ches ...
- POJ1466 Girls and Boys(二分图最大点独立集)
最大点独立集就是无向图中最多的两两不相邻的点集. 二分图最大点独立集=顶点数-二分图最大边独立集(二分图最大匹配) 这一题男女分别作YX部,如果x和y有浪漫关系则连边,如此构造二分图,答案显然就是最大 ...
- HDU--3829--Cat VS Dog【最大点独立集】
链接:http://acm.hdu.edu.cn/showproblem.php?pid=3829 题意:动物园有n条狗.m头猫.p个小孩,每一个小孩有一个喜欢的动物和讨厌的动物.如今动物园要转移一些 ...
- UVA 12083 POJ 2771 Guardian of Decency
/* http://acm.hust.edu.cn/vjudge/contest/view.action?cid=71805#problem/C */ 性质: [1]二分图最大点独立数=顶点数-二分图 ...
- BZOJ 1143: [CTSC2008]祭祀river(二分图最大点独立集)
http://www.lydsy.com/JudgeOnline/problem.php?id=1143 题意: 思路: 二分图最大点独立集,首先用floyd判断一下可达情况. #include< ...
随机推荐
- $.ajax方法提交数组参数
springmvc框架 var param = new Object(); var arr = new Array(); arr.push(1,2,3); param.ids=JSON.stringi ...
- POJ 1027:The Same Game 较(chao)为(ji)复(ma)杂(fan)的模拟
The Same Game Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 5168 Accepted: 1944 Des ...
- swagger获取
参考 https://www.jianshu.com/p/840320d431a1 https://www.cnblogs.com/luoluocaihong/p/7106276.html
- 一个小证明(题解 P5425 Part1)
所以这道题为什么可以这样做 嗯,我也不知道,不过我是来填坑的. \(Q\):为什么要把牛分成\(1\),\(1\)......\(N-K+1\)这样的\(K\)组呢? \(A\):我们设第\(i\)组 ...
- string.xml中的空格
<string name="userName"> 用 户 名</string>
- stl_map复习
set和map的底层模板是红黑树,可以有不同的键值和实值,关于增删改查,迭代器的使用都在代码里面,亲手尝试更方便记忆 #include <iostream>#include <map ...
- JSONObject 和JSONArray基本使用
1. 打包 JSONObject jsonObject = new JSONObject(); jsonObject.put("code", "200"); j ...
- FC 与 FB 与 OB 的区别,时间标记冲突与一致性检查 有详细的步骤
关键字1 组织块的程序是由用户自己编写. 关键字2 时间标记冲突与一致性检查 有详细的步骤. 关键字3 FC 与 FB 与 OB 的区别? (一)功能 功能块 区别 ? FB 和FC均为 用户编写 ...
- UVA - 712 S-Trees(S树)
题意:0往左走,1往右走,已知所有叶子的值,每个查询都是根结点到叶子结点的路径,路径的每一个点分别对应着x1,x2,x3……但是实际上的S树的路径可能并非是x1,x2,x3…… 分析:先存路径变量的顺 ...
- uniapp 小程序实现自定义底部导航栏(tarbar)
在小程序开发中,默认底部导航栏很难满足实际需求,好在官方给出了自定义形式,效果如下: 话不多说,直接上代码 1.组件 custom-tarbar.vue文件 <template> < ...