问题
A公司和B公司有n个合作的子项目,每个子项目由A公司和B公司各一名员工参与。一名员工可以参与多个子项目。

一个员工如果担任了该项目的项目经理,它需要对所参与的该项目负责。一个员工也可以负责多个项目。

A公司和B公司需要保证所有子项目都能有人负责,问最少需要指定几名项目经理?

输入描述
第一行为A公司的的人员id列表, 0< id数量 < 10000,用空格切分
第二行为B公司的人员id列表, 0< id数量 < 10000,用空格切分
第三行为有已经有多少个匹配数子项目合作关系n
下面有n行,每一行为每个子项目的合作对应关系,为两个id,第一个为A公司的员工id,第二个为B公司的员工id,用空格区分

输出描述
一个整数,A公司和B公司合起来至少需要指定几名项目经理

示例
输入
0 1 2
3 4 5
6
0 4
0 3
1 3
1 4
2 5
2 4
输出
3

思想
这是一种二分图的匹配问题如何用最少的节点覆盖全部路径,可利用匈牙利算法。需要利用一个数组match[]记录匹配情况也需要boolean类型判断是否存在增广路径。

我们需要构建二维矩阵保存节点间的增广路径,先判断节点是否存在增广路径,然后判断他是否覆盖到i点或者它的原节点是否能找到增广路径,如果有则把它覆盖到match对应的位置上。

代码

package class11;import java.util.Arrays;
import java.util.HashMap;
import java.util.Scanner;public class xiongyalisuanfa {public static void main(String[] args){Scanner reader = new Scanner(System.in);String staffA = reader.nextLine();String staffB = reader.nextLine();int n = reader.nextInt();String[] sa = staffA.split(" ");String[] sb = staffB.split(" ");int[] a = new int[sa.length];int[] b = new int[sb.length];int length = sa.length+sb.length;int[] match = new int[length];int[][] map = new int[length][length];HashMap<Integer,Integer> num =new HashMap<>();boolean[] visited = new boolean[length];int count = 0;for(int i =0;i<length;i++){//Arrays.fill()将数组中的值用value填满Arrays.fill(match,-1);Arrays.fill(visited,false);Arrays.fill(map[i],-1);}for(int i = 0;i<a.length;i++){a[i] = Integer.valueOf(sa[i]);num.put(a[i],i);}for(int i= 0;i<b.length;i++){b[i] = Integer.valueOf(sb[i]);num.put(b[i],i+a.length);}for(int i=0;i<n;i++){int xi = reader.nextInt();int yi = reader.nextInt();map[num.get(xi)][num.get(yi)] = 1;map[num.get(yi)][num.get(xi)] = 1;}process(num,match,a,b,length,visited,map);for(int i = 0;i<length;i++){if(match[i]!=-1) count++;}System.out.println(count/2);}public static void setvisited(boolean[] visited){for(int i = 0;i<visited.length;i++){visited[i] = false;}}public static boolean findpath(HashMap<Integer,Integer> num,int x,int[]match,int length,boolean[] visited,int[][]map){for(int i = 0;i<length;i++){//顶点x在增广路径上if(!visited[i]&&map[x][i] == 1){visited[i] = true;//match[i]是未覆盖点或者match[i]的原匹配点X能找到增广路径if(match[i] ==-1||findpath(num,match[i],match,length,visited,map)){match[x] = i;match[i] = x;return true;}}}return false;}public static void process(HashMap<Integer,Integer>num,int[]match,int[] a,int[]b,int length,boolean[] visited,int[][] map1){for(int i = 0;i<a.length;i++){if(match[num.get(a[i])] ==-1){setvisited(visited);findpath(num,num.get(a[i]),match,length,visited,map1);}}for(int i = 0;i<b.length;i++){if(match[num.get(b[i])] == -1){setvisited(visited);findpath(num,num.get(b[i]),match,length,visited,map1);}}}}

网易校招笔试第三题匈牙利算法相关推荐

  1. 联通软研院2020年球季校招笔试第三题 20190916

    问题描述:小明有5个歌单,编号分别为A.B.C.D.E,每个歌单有3首不同的歌,现在他想要一个程序,当他输入一些歌单的名称的时候,每个歌单中输出一首歌到播放列表,并输出所有满足条件的播放列表. 输入: ...

  2. 2020年联通软件研究院校招笔试第三题

    题目描述: 解题思路: 直接从50元开始尝试,然后尝试10元,再然后5元,再然后一元. 然后处理小数部分. 解题代码: import java.util.Scanner;public class Ma ...

  3. 九月十月百度,迅雷,华为,阿里巴巴最新校招笔试面试三十题(10.18)

    九月十月百度,迅雷,华为,阿里巴巴,最新校招笔试面试三十题 题记 本博客自2010年10月11日开通以来,已经帮助了一大批人找到工作,特别是连续三年在每一年的9.10月份陪伴了至少三届毕业生找工作的旅 ...

  4. 九月百度,迅雷,华为,阿里巴巴,最新校招笔试面试十题 .

    九月百度,迅雷,华为,阿里巴巴,最新校招笔试面试十题 http://blog.csdn.net/v_july_v/article/details/11921021 题记 本博客自2010年10月11日 ...

  5. 网易笔试编程题java_2017年网易校招笔试JAVA研发编程题

    为什么80%的码农都做不了架构师?>>> 尝试挑战了下网易2017校招的笔试编程题,共三题,AC第一题,第二题思考了很久勉强用一种low逼的方式完成,第三题没有完成,希望路过的ACM ...

  6. 九月百度,迅雷,华为,阿里巴巴,最新校招笔试面试十题(更新至9.24)

    题记 本博客自2010年10月11日开通以来,已经帮助了一大批人找到工作,特别是连续三年在每一年的9.10月份陪伴了至少三届毕业生找工作的旅程,包括校招中的笔试面试,今年也不会例外,我会在本博客开通3 ...

  7. 2014 微软校招笔试答案 编程题

    上午参加完微软校招笔试,最后编程题的代码,仅供参考 #include <iostream> using namespace std; struct Node { Node *next;   ...

  8. 带你入门多目标跟踪(三)匈牙利算法KM算法

    匈牙利算法(Hungarian Algorithm)与KM算法(Kuhn-Munkres Algorithm)是做多目标跟踪的小伙伴很容易在论文中见到的两种算法.他们都是用来解决多目标跟踪中的数据关联 ...

  9. 【编程笔试】美团2021校招笔试-通用编程题第4场(附思路及C++代码)

    导览 练习地址 小团无路可逃 小团的神秘暗号 小团的选调计划 小团的默契游戏 总结 练习地址 点此前往练习 小团无路可逃 小团惹小美生气了,小美要去找小团"讲道理".小团望风而逃, ...

  10. 【编程笔试】美团2021校招笔试-通用编程题第1场(附思路及C++代码)

    导览 练习地址 小美的送花路线 小美的评分计算器 小美的外卖省钱计划 小美的代金券要过期啦 总结 练习地址 点此前往练习 小美的送花路线 小美是美团的一名鲜花快递员,鲜花是一种保质期非常短的商品,所以 ...

最新文章

  1. 地图样式自定义_干货在线 | ArcGIS中定义图框样式
  2. MxGraph从入门到精通之2:HelloWorld程序解析
  3. android消息机制
  4. 怎么取html网页中的样式,从建站到拿站 -- HTML和CSS基础
  5. 前端学习(2921):vue的事件
  6. Bitfinex推出ETH 2.0质押服务
  7. 换个角度想问题,不再孤单
  8. 抖音很火的计算机音乐,抖音最近很火的几首背景音乐(BGM),推荐给大家很好听...
  9. R 语言实战-Part 3 笔记
  10. 鸿蒙os拍摄功能,华为5G巅峰之作:屏下摄像头+鸿蒙OS+徕卡镜头 这才是华为的实力...
  11. 【财务】FMS财务管理系统---对账平台
  12. 为html添加footbar,foobar2000界面组件添加设置方法
  13. 百度病了,必应挂了,Yandex疯了。
  14. python制作课程表提醒_10行Python代码制作群聊提醒小助手,再也不怕漏掉消息了...
  15. 数值分析北航第八题第三次计算实习任务(附百度云源码java版)
  16. python打印丘比特之心_Python入门练习
  17. UI架构设计五 — DTA文件使用脚本自动生成
  18. 工单内容的三个层级分类
  19. pspice如何隔离驱动mosfet,MEG和M的
  20. css样式超出部分省略号

热门文章

  1. MP3参数,格式,术语有关一切内容详解
  2. Java针对不同文件加水印
  3. Jmeter创建大批量测试用户数据技巧
  4. 漆学军:均线交叉,金叉做多,死叉做空的例子程序
  5. 软件架构设计–五视图法
  6. android字体颜色渐变色,实现TextView文本颜色渐变的骚操作
  7. 06-图3 六度空间
  8. tplink怎么进去_想设置路由器,如何进入tplink
  9. python爬虫实战(七) 爬取B站柯南弹幕+Gephi绘制人物画像
  10. LaTex排版教程——入门篇