uvalive 4288 Cat Vs. Dog
题意:
有若干个观看者,要对节目进行投票,每张票一定让一直猫留下,一只狗下场,或者一只狗留下,一只猫下场。
如果某个观看者希望留下的动物下场了,或者希望下场的动物留下了,那么他就会离开。
给出若干个投票信息,求出能够留下的人的最大值。
思路:
假设此时有两个人有矛盾,那么一定是其中一个人希望留下的,另一个人希望下场(反之也成立)。
那么我们就在这两个人之间连一条边,此时就形成了一个二分图。
求留下的人最多,那么就是求离开的人最少,也就是说要用最少的人去覆盖所有的矛盾,那么就转化成了一个求二分图最小点覆盖的问题,二分图的最小点覆盖 = 二分图的最大匹配。
匈牙利算法,复杂度O(n^3)。
代码:
#include <stdio.h>
#include <string.h>
#include <vector>
using namespace std; const int N = ; int link[N];
bool vis[N];
vector<int> g[N]; struct node
{
char a,b;
int x,y; node(char aa,char bb,int xx,int yy)
{
a = aa;
b = bb;
x = xx;
y = yy;
}
}; vector<node> vn; bool dfs(int u)
{
vis[u] = ; for (int i = ;i < g[u].size();i++)
{
int to = g[u][i]; if (!vis[to])
{
vis[to] = ; if (link[to] == - || dfs(link[to]))
{
link[to] = u;
link[u] = to;
return true;
}
}
} return false;
} int solve(int n)
{
int ans = ; for (int i = ;i < n;i++)
{
if (link[i] == -)
{
memset(vis,,sizeof(vis));
if (dfs(i)) ans++;
}
} return ans;
} int main()
{
int t; scanf("%d",&t); while (t--)
{
int c,d,v; memset(link,-,sizeof(link)); scanf("%d%d",&c,&d);
scanf("%d",&v); for (int i = ;i < v;i++) g[i].clear();
vn.clear(); for (int i = ;i < v;i++)
{
char a,b;
int x,y; scanf(" %c%d",&a,&x);
scanf(" %c%d",&b,&y); vn.push_back(node(a,b,x,y));
} for (int i = ;i < v;i++)
{
for (int j = i + ;j < v;j++)
{
if (vn[i].a == vn[j].b && vn[i].x == vn[j].y)
{
g[i].push_back(j);
g[j].push_back(i);
}
else if (vn[j].a == vn[i].b && vn[j].x == vn[i].y)
{
g[i].push_back(j);
g[j].push_back(i);
}
}
} int res = solve(v); printf("%d\n",v - res);
} return ;
}
uvalive 4288 Cat Vs. Dog的更多相关文章
- Cat VS Dog
Cat VS Dog Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 125536/65536 K (Java/Others)Total ...
- HDU 3289 Cat VS Dog (二分匹配 求 最大独立集)
题意:每个人有喜欢的猫和不喜欢的狗.留下他喜欢的猫他就高心,否则不高心.问最后最多有几个人高心. 思路:二分图求最大匹配 #include<cstdio> #include<cstr ...
- (hdu step 6.3.7)Cat vs. Dog(当施工方规则:建边当观众和其他观众最喜爱的东西冲突,求最大独立集)
称号: Cat vs. Dog Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tot ...
- HDU 3829 Cat VS Dog / NBUT 1305 Cat VS Dog(二分图最大匹配)
HDU 3829 Cat VS Dog / NBUT 1305 Cat VS Dog(二分图最大匹配) Description The zoo have N cats and M dogs, toda ...
- hdu 3829 Cat VS Dog 二分图匹配 最大点独立集
Cat VS Dog Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 125536/65536 K (Java/Others) Prob ...
- Hdu3829 Cat VS Dog(最大独立点集)
Cat VS Dog Problem Description The zoo have N cats and M dogs, today there are P children visiting t ...
- Cat VS Dog HDU - 3829 (最大独立集 )
Cat VS Dog Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 125536/65536 K (Java/Others)Total ...
- hdu 2768 Cat vs. Dog (二分匹配)
Cat vs. Dog Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- HDU3829:Cat VS Dog(最大独立集)
Cat VS Dog Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 125536/65536 K (Java/Others)Total ...
随机推荐
- Win10系统桌面右键新建没有内容怎么恢复
Win10系统桌面右键新建没有内容怎么恢复 添加txt文本文档 运行->regedit,打开注册表编辑器 展开HKEY_CLASSES_ROOT 找到.txt 选中.txt,修改右侧窗格的“默认 ...
- Qt Multimedia 模块类如何使用?(表格)
qt 多媒体模块介绍 类名 英文描述 中文描述 QAudioBuffer Represents a collection of audio samples with a specific format ...
- 如何使用Beyond Compare 对比差异文件【制作Patch(补丁包)文件】
场景:研发部的代码从SVN变更至GIt,通过Jenkins每天自动生成程序包. 如需要获取单独的程序包更新,而不是整个程序包覆盖更新,这时候就需要用到Beyond Compare 对比工具 操作步骤1 ...
- html5页面与android页面之间通过url传递参数
html5页面与android页面之间可以通过url传递参数,android将参数放在htm5的url ?后面,js获取url ?号后面的参数. 方法一: <scrīpt> /* 用途 ...
- XtraBackup之踩过的坑
xtrabackup相信目前使用已经非常广泛了,备份innodb表的首选工具,但是其中还是有点小坑,虽然发生的概率不大,但是我还是踩坑了.关于xtrabackup的详细参考请查阅官方文档http:// ...
- Redis入门到高可用(二)—— Redis启动及使用
1. 三种启动方式 ♦️ 最简启动 ./redis-server 使用Redis默认配置进行启动; ♦️ 动态参数启动 * redis-server --port 6380 更改端口为6380并 ...
- Vue-selller 饿了吗 - 准备工作
安装脚手架vue-cli npm install -g vue-cli 建立项目 vue init webpack sell(sell是项目名称) 进入项目目录 cd sell 可以看目录结构: ls ...
- eclipse中安装XML editor Rinzo
eclipse中安装XML editor Rinzo 1. 较高版本的eclipse可以通过 Help--Market 搜索 Rinzo,然后安装 2. 第1种方法如果不行,尝试下面的方法 (1)从 ...
- cocos2dx JS 游戏切到后台再进入游戏的处理
由于Cocos引擎中,游戏切入后台后定时器后停掉会让某个Animation动作停止. 导致当重新进入游戏时,看到的不是你想要的画面.或者定时器倒计时的时间对不上等问题. cc.game.EVENT_H ...
- 收集:C# WinForm获取当前路径汇总
Winform获取应用程序的当前路径的方法集合,具体如下,值得收藏 //获取当前进程的完整路径,包含文件名(进程名). string str = this.GetType().Assembly.Loc ...