题意:

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

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

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

思路:

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

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

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

匈牙利算法,复杂度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 ;
}

最新文章

  1. mybatis返回数据类型为map,值为null的key没返回
  2. oracle数据库相关知识点
  3. IIS中ASP.NET安全配置
  4. [bzoj3694]最短路
  5. Docker个人学习总结
  6. 使用MbrFix.exe修复MBR分区表
  7. bzoj1876: [SDOI2009]SuperGCD
  8. oracle中从指定日期中获取月份或者部分数据
  9. Socket开发时,Available为0,实际还有数据的问题
  10. c#中运行时编译时 多态
  11. canvas画扇形图(本文来自于http://jo2.org/html5-canvas-sector/)
  12. 【转】软件开发工具介绍之 6.Web开发工具
  13. Linux显示所有运行中的进程
  14. 自行实现高性能MVC WebAPI
  15. 017_python常用小技巧
  16. Mathematica 代码
  17. swagger 指定字段不显示到文档里
  18. hdfs-03-hdfs客户端操作
  19. Linux追加文件内容并在内容前加上该文件名(awk, FILENAME功能妙用)
  20. chapter15中使用generator来实现异步化操作的同步化表达的例子

热门文章

  1. 【Python全栈-后端开发】Django入门基础
  2. fopen 的使用
  3. vuex是什么?怎么使用?哪种功能场景使用它?
  4. 【SQL】where 后不可以接聚合函数,都哪些是聚合函数?
  5. 软件项目管理:什么是baseline
  6. sql server误删数据恢复delete(低效版)
  7. Laravel上传产品图片Uploading img
  8. 微信小程序使用阿里图标-iconfont
  9. PHP如何动态传入参数
  10. 2019.03.24 Ajax