hdu1526 二分匹配+ floyd
题意:
有N个插座,M个用电器,和K种转换器(每种有无限个),问最少多少个用电器无法充电.
思路 : 总的电器数 减去 电器和插座的最大匹配数
我有的是map去映射每一个串,根据转换器建边,然后跑一边floyd(为了确定连通性),
跑完后就再建一个图匹配用,这个图中当 i 插座和j用电器之间的距离不是inf时就可以连接ij;
然后一边匈牙利就ok了,提醒一点就是插座,用电器,转换器中的字符串有可能会出现不同的,
所以每一次建边的时候记得映射下就行了..
#include<stdio.h>
#include<string.h>
#include<string>
#include<map>
#define N 100 + 10
#define N_node 500 + 10
#define N_edge 10000 + 100
#define inf 100000000
using namespace std;
typedef struct
{
int to ,next;
}STAR;
typedef struct
{
char str[30];
}CHAZUO;
typedef struct
{
char str[30];
}YONGHU;
CHAZUO cz[N];
YONGHU yh[N];
STAR E[N_edge];
int list[N_node] ,tot;
int mk_gx[N_node] ,mk_dfs[N_node];
int mp[N_node][N_node];
map<string,int>hash_node;
void add(int a, int b)
{
E[++tot].to = b;
E[tot].next = list[a];
list[a] = tot;
}
int minn(int x ,int y)
{
return x < y ? x : y;
}
void floyd(int n)
{
for(int k = 1 ;k <= n ;k ++)
for(int i = 1 ;i <= n ;i ++)
for(int j = 1 ;j <= n ;j ++)
mp[i][j] = minn(mp[i][j] ,mp[i][k] + mp[k][j]);
}
int DFS_XYL(int s)
{
for(int k = list[s] ;k ;k = E[k].next)
{
int to = E[k].to;
if(mk_dfs[to]) continue;
mk_dfs[to] = 1;
if(mk_gx[to] == -1 || DFS_XYL(mk_gx[to]))
{
mk_gx[to] = s;
return 1;
}
}
return 0;
}
int main ()
{
int n ,m ,k ,i ,j ,t ,nowt ,a ,b;
char str1[30] ,str2[30];
scanf("%d" ,&t);
while(t--)
{
hash_node.clear();
nowt = 0;
scanf("%d" ,&n);
for(i = 1 ;i <= n ;i ++)
{
scanf("%s" ,cz[i].str);
if(hash_node[cz[i].str] == 0)
hash_node[cz[i].str] = ++ nowt;
}
scanf("%d" ,&m);
for(i = 1 ;i <= m ;i ++)
scanf("%s%s",str1 ,yh[i].str);
for(i = 1 ;i <= 500 ;i ++)
for(j = 1 ;j <= 500 ;j ++)
if(i == j)mp[i][j] = 0;
else mp[i][j] = inf;
scanf("%d" ,&k);
for(i = 1 ;i <= k ;i ++)
{
scanf("%s%s" ,str1 ,str2);
if(hash_node[str1] == 0)
hash_node[str1] = ++ nowt;
if(hash_node[str2] == 0)
hash_node[str2] = ++ nowt;
a = hash_node[str1];
b = hash_node[str2];
mp[a][b] = 1;
}
floyd(nowt);
memset(list ,0 ,sizeof(list));
tot = 1;
for(i = 1 ;i <= m ;i ++)
for(int j = 1 ;j <= n ;j ++)
{
if(hash_node[yh[i].str] == 0)
hash_node[yh[i].str] = ++nowt;
if(mp[hash_node[yh[i].str]][hash_node[cz[j].str]] == inf)
continue;
add(i ,j);
}
int sum = 0;
memset(mk_gx ,255 ,sizeof(mk_gx));
for(i = 1 ;i <= nowt ;i ++)
{
memset(mk_dfs ,0 ,sizeof(mk_dfs));
sum += DFS_XYL(i);
}
printf("%d\n" ,m - sum);
if(t)puts("");
}
return 0;
}
hdu1526 二分匹配+ floyd的更多相关文章
- N - Optimal Milking - POJ 2112(二分图多重匹配+Floyd+二分搜索)
题意:有K太挤奶机,C头奶牛,每个挤奶机每天只能为M头奶牛服务,下面给的K+C的矩阵,是形容相互之间的距离,求出来走最远的那头奶牛要走多远 分析:应该先使用floyd求出来点之间的最短路??(不晓得给 ...
- BNUOJ 12756 Social Holidaying(二分匹配)
题目链接:http://www.bnuoj.com/bnuoj/problem_show.php?pid=12756 Social Holidaying Time Limit: 3000ms Memo ...
- kuangbin带你飞 匹配问题 二分匹配 + 二分图多重匹配 + 二分图最大权匹配 + 一般图匹配带花树
二分匹配:二分图的一些性质 二分图又称作二部图,是图论中的一种特殊模型. 设G=(V,E)是一个无向图,如果顶点V可分割为两个互不相交的子集(A,B),并且图中的每条边(i,j)所关联的两个顶点i和j ...
- The Maximum Unreachable Node Set 【17南宁区域赛】 【二分匹配】
题目链接 https://nanti.jisuanke.com/t/19979 题意 给出n个点 m 条边 求选出最大的点数使得这个点集之间 任意两点不可达 题目中给的边是有向边 思路 这道题 实际上 ...
- POJ 1274 The Perfect Stall、HDU 2063 过山车(最大流做二分匹配)
The Perfect Stall Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 24081 Accepted: 106 ...
- [kuangbin带你飞]专题十 匹配问题 二分匹配部分
刚回到家 开了二分匹配专题 手握xyl模板 奋力写写写 终于写完了一群模板题 A hdu1045 对这个图进行 行列的重写 给每个位置赋予新的行列 使不能相互打到的位置 拥有不同的行与列 然后左行右列 ...
- BZOJ 1189 二分匹配 || 最大流
1189: [HNOI2007]紧急疏散evacuate Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1155 Solved: 420[Submi ...
- Kingdom of Obsession---hdu5943(二分匹配)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5943 题意:给你两个数n, s 然后让你判断是否存在(s+1, s+2, s+3, ... , s+n ...
- poj 2060 Taxi Cab Scheme (二分匹配)
Taxi Cab Scheme Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 5710 Accepted: 2393 D ...
随机推荐
- Wireshark使用记录
TCP/IP协议族里的协议众多 要一一精通比较困难,在一些紧急急需要分析主机.客户端的流量场景时,不懂协议也要上!下面就是用到哪里就记录到哪,有错误欢迎评论指出,多谢. wireshark这玩意相当于 ...
- Mac创建Root用户
1.打开Mac终端管理工具 前往-实用工具-终端 2.用命令的形式创建账户 sudo passwd root 3.输入当前登录用户密码 4.输入root用户密码并验证
- DES加密详解
目录 1 根据输入的秘钥得到16个子秘钥 1.1 大致流程 1.2 利用PC-1从K_0中挑出K_1 1.3 利用PC-2从K_1中挑出16个子秘钥 2 利用16个子秘钥对明文进行加密 2.1 大致流 ...
- Boltdb学习笔记之〇--概述
更多精彩内容,请关注微信公众号:后端技术小屋 看了boltdb也有一阵子了,看完之后总想写点什么,因为感觉到这可能是个不小的坑,所以迟迟没有动笔(没错我的拖延症又犯了..).最近有一种流行的说法:如果 ...
- Hi3359AV100 NNIE开发(1)-RFCN demo LoadModel函数与参数解析
之后随笔将更多笔墨着重于NNIE开发系列,下文是关于Hi3359AV100 NNIE开发(1)-RFCN demo LoadModel函数与参数解析,通过对LoadModel函数的解析,能够很好理解. ...
- rest framework Views
基于类的意见 Django的基于类的意见是从旧式的观点颇受欢迎. - Reinout面包车里斯 REST框架提供了一个APIView类,它的子类Django的View类. APIView类是从正规不同 ...
- 建立高速缓存机制-java版
前言 一台计算机的核心是CPU,它是计算机系统的运算和控制核心.由于它处理运算速度快,所以基本都会给CPU配置一级缓存,当CPU要读取一个数据时,首先从缓存中查询,如果没有在从内存或者磁盘块中找. ...
- Maven安装本地依赖包
前提已安装maven并且配置了环境变量1.进入jar包所在的目录,打开cmd2.了解包的groupId.artifactId.version2.输入命令(依赖sdk为例)---maven命令mvn i ...
- Android Studio 之 编写精美的聊天界面
•准备工作 首先制作一张 .9 格式的聊天气泡,参见我的这篇博客: 需要注意的是,制作完成后,应该将原始文件删除,否则AS会分不清楚而报错. 新建一个 Empty Activity,Java 和 XM ...
- Hadoop学习笔记—HDFS
目录 搭建安装 三个核心组件 安装 配置环境变量 配置各上述三组件守护进程的相关属性 启停 监控和性能 Hadoop Rack Awareness yarn的NodeManagers监控 命令 hdf ...