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相关推荐
- POJ2594(二分匹配+Floyd求传递闭包)
题目:Treasure Exploration 很明显是最小路径覆盖,只是必须先要求传递闭包就行了. #include <stdio.h> #include <string.h> ...
- POJ - 2446 Chessboard 二分匹配+建图
题目链接 题意很简单,是二分匹配的一种常见的题型,问题就在于怎样转换到二分图上来. 首先对对n*m-k正常点进行编号,然后遍历查找每一个正常点的上下左右是否能连接(就是判断另个点是否也是正常的),如果 ...
- poj3041--Asteroids(二分匹配)[将矩阵行列转化为边]
题目大意,给出n*n的矩阵,其中有m个流星,一下给出每颗流星的坐标,每一次攻击可以消除一行或一列的流星,问最少攻击几次? 竟然是二分匹配!竟然是二分匹配!竟然是二分匹配!竟然是二分匹配! 建图,以行为 ...
- 香港大学提出OneNet:一阶段端到端目标检测网络,无需NMS!无需二分匹配!
点击上方,选择星标或置顶,不定期资源大放送! 阅读大概需要15分钟 Follow小博主,每天更新前沿干货 本文作者:孙培泽 | 编辑:Amusi https://zhuanlan.zhihu.com ...
- 杭电2063--过山车(二分匹配)
过山车 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submis ...
- pku 1486 求出二分匹配图中的必须边
开始楞是没看懂意思,E文让我很纠结... 要判断一条边是否为二分图中必须边,方法如下: 1.先求出原图的任意最大匹配 2.对二分图某一边的所有点,删去其当前的匹配边.删的过程不是简单的将原图设为不连通 ...
- POJ1325二分匹配或者DINIC(最小路径覆盖)
题意: 有k个任务,两个机器,第一个机器有n个模式,第二个机器有m个模式,每个任务要么在第一个机器的一个模式下工作,要么在第二个机器的一个模式下工作,机器每切换一个模式需要重启一次,两个 ...
- POJ2239简单二分匹配
题意: 一周有7天,每天可以上12节课,现在给你每科课的上课时间,问你一周最多可以上几科课,一科课只要上一节就行了. 思路: 简单题目,直接二分就行了,好久没写二分匹配了,练习 ...
- hdu2413 二分+二分匹配
题意: 地球和外星球大战,地球有n个飞船,外星球有m个飞船,每个飞船有自己的其实战舰和战舰增长率,星球于星球之间有距离,问你最少多少年地球可以打败外星球,每个星球最多只能和一个星球对战.. ...
最新文章
- numpy输出到屏幕时有逗号和没逗号的原因
- SparkSQL之External Data
- IDEA、 JetBrains、webstorm、 pycharm 破解教程
- 引用:初探Sql Server 执行计划及Sql查询优化
- 小数转换成二进制c语言,只写出了十进制小数转换成二进制的,求二进制小数转十进制的...
- 动态规划基础水题提纲
- 第 2 章 MongoDB
- 全新的PDO数据库操作类(仅适用Mysql)
- 你可以分配多大的内存
- PHP在Linux上上传文件的注意事项
- Python让繁琐工作自动化——chapter18 GUI控制键盘与鼠标
- Kotlin从入门到放弃(三)——协程
- php 字体设计,时尚前沿:15个创意的3D字体设计艺术作品欣赏
- 资源分享 | 敬伟 PS 教程 ABCD 四套全集
- document.getelementbyid是什么意思
- 开发环境搭建——从零到实盘1
- 电子烟中测电阻注意事项
- 【多元统计分析】一、多元统计分析概述
- linux操作系统之 服务器架构
- 用智能TFT液晶模块这种串口屏做产品界面设计太简单了,大大的节省了开发时间...
热门文章
- hibernate02环境的搭建
- Ionic实战 自动升级APP(Android版)
- oschina android版源码中的颜色值
- Guava学习笔记:Preconditions优雅的检验参数
- 看jquery3.3.1学js类型判断的技巧
- Spring学习五(JDBC支持)
- C#枚举类型和结构体
- Mysql数据库“Communications link failure due to underlying exception”问题
- 也跟90后小朋友聊聊
- [luogu1131][bzoj1060][ZJOI2007]时态同步【树形DP】