题意:

有若干个观看者,要对节目进行投票,每张票一定让一直猫留下,一只狗下场,或者一只狗留下,一只猫下场。

如果某个观看者希望留下的动物下场了,或者希望下场的动物留下了,那么他就会离开。

给出若干个投票信息,求出能够留下的人的最大值。

思路:

假设此时有两个人有矛盾,那么一定是其中一个人希望留下的,另一个人希望下场(反之也成立)。

那么我们就在这两个人之间连一条边,此时就形成了一个二分图。

求留下的人最多,那么就是求离开的人最少,也就是说要用最少的人去覆盖所有的矛盾,那么就转化成了一个求二分图最小点覆盖的问题,二分图的最小点覆盖 = 二分图的最大匹配。

匈牙利算法,复杂度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的更多相关文章

  1. Cat VS Dog

    Cat VS Dog Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 125536/65536 K (Java/Others)Total ...

  2. HDU 3289 Cat VS Dog (二分匹配 求 最大独立集)

    题意:每个人有喜欢的猫和不喜欢的狗.留下他喜欢的猫他就高心,否则不高心.问最后最多有几个人高心. 思路:二分图求最大匹配 #include<cstdio> #include<cstr ...

  3. (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 ...

  4. 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 ...

  5. hdu 3829 Cat VS Dog 二分图匹配 最大点独立集

    Cat VS Dog Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 125536/65536 K (Java/Others) Prob ...

  6. Hdu3829 Cat VS Dog(最大独立点集)

    Cat VS Dog Problem Description The zoo have N cats and M dogs, today there are P children visiting t ...

  7. Cat VS Dog HDU - 3829 (最大独立集 )

    Cat VS Dog Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 125536/65536 K (Java/Others)Total ...

  8. hdu 2768 Cat vs. Dog (二分匹配)

    Cat vs. Dog Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  9. HDU3829:Cat VS Dog(最大独立集)

    Cat VS Dog Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 125536/65536 K (Java/Others)Total ...

随机推荐

  1. CF865D Buy Low Sell High 贪心

    正解:贪心 解题报告: 传送门! 这题首先有个很显然的dp,太基础了不说QAQ 然后考虑dp是n2的,显然过不去,所以换一个角度 然后发现这题和普通的dp的题有什么不同呢?就它这儿是一天只能买一支股, ...

  2. RSA 时序攻击

    RSA的破解从理论上来讲是大数质数分解,可是就是有一些人另辟蹊径,根据你解密的时间长短就能破解你的RSA私钥. 举一个不恰当但是比较容易理解的例子: 密文0101 私钥0110 明文0100 问题的关 ...

  3. 014-通过JDB调试,通过HSDB来查看HotSpot VM的运行时数据

    一.JDB调试        在预发环境下进行debug时,时常因为工具和环境的限制,导致debug体验非常差,那么有什么方法能够简化我们进行debug的体验吗?JDB就是一种.        JDB ...

  4. ls 命令查看文件时候,按修改时间倒序或升序排列

    1,按照时间升序 命令:ls -lrt 详细解释: -l use a long listing format 以长列表方式显示(详细信息方式) -t sort by modification time ...

  5. RN-android 打包后,部分图片不显示

    安卓打包后以及真机调试的时候部分图片不显示,原因是 安卓的包文件并不会每次都把图片资源重新打包.也就是说,你第一次打完包之后,再更新图片与代码,代码是会生效,但是图片文件是拿不到的,解决办法是 ../ ...

  6. echarts给数据视图添加表格样式

    1,准备好样式 <style>.myTable {margin: 0 auto;/* height: 300px; */width: 700px;} .myTitle {backgroun ...

  7. swiper默认第二个且居中

    var mySwiper = new Swiper ('.swiper-bottom', { spaceBetween: 25, freeMode: true, initialSlide :1,//默 ...

  8. 外部盒模型大小固定 内部有边框div设置浮动时 缩放窗口内部div溢出的解决办法

    原因分析: chorme和firefox浏览器下当缩放窗口大小时,边框的计算宽度变大造成内部div宽度的计算宽度变大,外部div放不下内部div而溢出. 解决办法: 给内部div设置 box-sizi ...

  9. (转)redis分布式锁-SETNX实现

    Redis有一系列的命令,特点是以NX结尾,NX是Not eXists的缩写,如SETNX命令就应该理解为:SET if Not eXists.这系列的命令非常有用,这里讲使用SETNX来实现分布式锁 ...

  10. Tf中的SGDOptimizer学习【转载】

    转自:https://www.tensorflow.org/api_docs/python/tf/train/GradientDescentOptimizer 1.tf.train.GradientD ...