当前位置: 首页 > news >正文

昆明网站建设培训班怎样做网络推广

昆明网站建设培训班,怎样做网络推广,济南源聚网络公司,免费发布租房信息网站文章目录 二分图介绍染色法判定二分图例题:860. 染色法判定二分图 匈牙利匹配二分图最大匹配匈牙利匹配算法思想例题:861. 二分图的最大匹配 二分图介绍 https://oi-wiki.org/graph/bi-graph/ 二分图是图论中的一个概念,它的所有节点可以被…

文章目录

  • 二分图介绍
  • 染色法判定二分图
    • 例题:860. 染色法判定二分图
  • 匈牙利匹配
    • 二分图最大匹配
    • 匈牙利匹配算法思想
    • 例题:861. 二分图的最大匹配

二分图介绍

https://oi-wiki.org/graph/bi-graph/

二分图是图论中的一个概念,它的所有节点可以被分为两个独立的集合,每个边的两个端点分别来自这两个不同的集合
换句话说,二分图中不存在连接同一集合内两个节点的边

在这里插入图片描述

在这里插入图片描述

染色法判定二分图

如何判断一个图是二分图?
当且仅当图中不含奇数环。(奇数环指的是环中边的个数是奇数)(因为每一条边都是从一个集合走到另一个集合,只有走偶数次才有可能回到同一个集合。)


染色:相邻的节点的颜色不一样。
在这里插入图片描述
因为没有奇数环,所以染色过程是一定不会发生矛盾的。

时间复杂度是 O ( n + m ) O(n + m) O(n+m) , n 表示点数,m 表示边数。

例题:860. 染色法判定二分图

https://www.acwing.com/activity/content/problem/content/926/

在这里插入图片描述

使用 dfs 对图中各个节点染色,染色过程中不发生冲突即为二分图。

import java.util.*;public class Main {static final int N = 100005;static List<Integer>[] g = new ArrayList[N];static int[] color = new int[N];public static void main(String[] args){Scanner sc = new Scanner(System.in);int n = sc.nextInt(), m = sc.nextInt();// 建图Arrays.setAll(g, e -> new ArrayList<Integer>());for (int i = 0; i < m; ++i) {int u = sc.nextInt(), v = sc.nextInt();g[u].add(v);g[v].add(u);}// 图可能由多个非连通的子图构成。因此,应该对每一个尚未访问过的点都进行一次深度优先搜索。boolean f = true;for (int i = 1; i <= n; ++i) {if (color[i] == 0 && !dfs(i, 1)) {f = false;break;}}System.out.println(f? "Yes": "No");}static boolean dfs(int x, int c) {boolean res = true;color[x] = c;for (int y: g[x]) {if (color[y] == 0) res &= dfs(y, 3 - c);else if (color[y] == color[x]) return false;}return res;}
}

匈牙利匹配

二分图最大匹配

**二分图最大匹配**
翻译成人话就是——
给定一个二分图 G,即分左右两部分,各部分之间的点没有边连接,要求选出一些边,使得这些边没有公共顶点,且边的数量最大

匈牙利匹配算法思想

两个集合的点数分别是 n1 , n2。
枚举 n1 , 尝试 i 是否可以找到一个 j 完成匹配,匹配成功就 ++cnt。

所以重点是 find(i) 方法:
对每个 i ,枚举 i 相邻的所有 j —— 如果 j 没有被匹配就直接返回 true;如果 j 被匹配了,就尝试现在和 j 匹配的另一个 i 能不能换一个 j,能换就换一个然后返回 true;否则返回 false。

时间复杂度是 O ( n ∗ m ) O(n * m) O(nm),n 表示点数,m 表示边数。

例题:861. 二分图的最大匹配

https://www.acwing.com/activity/content/problem/content/927/
在这里插入图片描述

重点是理解数组 matchst 的含义,以及方法 find(x) 的写法和使用。

import java.util.*;public class Main {static final int N = 505;static int[][] g = new int[N][N];static int[] match = new int[N];		// match记录集合2中各个点匹配的集合1的点是哪个static boolean[] st = new boolean[N];	// st表示集合2中的点有没有被匹配static int n1, n2;public static void main(String[] args){Scanner sc = new Scanner(System.in);n1 = sc.nextInt();n2 = sc.nextInt();int m = sc.nextInt();// 建图for (int i = 0; i < m; ++i) {int u = sc.nextInt(), v = sc.nextInt();g[u][v] = 1;        // 左边的 u 和 右边的 v 之间有一条边}int cnt = 0;for (int i = 1; i <= n1; ++i) {Arrays.fill(st, false);		// 重置stif (find(i)) ++cnt;}System.out.println(cnt);}static boolean find(int x) {for (int j = 1; j <= n2; ++j) {if (!st[j] && g[x][j] == 1) {st[j] = true;// 如果 j 还没有匹配或者当前使用 j 的 x 可以让出去if (match[j] == 0 || find(match[j])) {match[j] = x;return true;}}}return false;}
}
http://www.dinnco.com/news/62431.html

相关文章:

  • 哪个电商平台最能卖货韶山百度seo
  • 南通疫情最新消息seo优化师
  • 希音电商网站今天的新闻大事10条
  • 怎么早网站上放广告网络广告一般是怎么收费
  • 做网站设计的网站志鸿优化网官网
  • 合肥专业手机网站哪家好google网页版入口
  • 怎么入侵网站后台电商运营推广怎么做
  • 赤壁网站制作成都网站seo技巧
  • 宁波外贸网站设计标题优化
  • 怎么用云校建设学校网站优化关键词怎么做
  • seo网站优化经理网络营销的背景和意义
  • 辽宁省建设厅官网抖音seo搜索引擎优化
  • 晋城网站建设电话百度客服投诉中心
  • 有没有给别人做图赚钱的网站买淘宝店铺多少钱一个
  • 网站商城建设合同范本广东近期新闻
  • 延安网站建设网络公司站长之家查询网站
  • 设计工作室网站推荐网站seo外链平台
  • 德州网站优化公司百度推广投诉中心
  • 网站追踪如何做佛山网站建设制作
  • 网站开发文档撰写作业网络营销的几种模式
  • 申请个人网站有什么用郑州seo排名公司
  • 创办一个网站的费用百度知道免费提问
  • 珠海做网站的公司有哪些百度搜索风云榜官网
  • 用c语言可以做网站吗建网站多少钱
  • 长沙网站策划it培训班学出来有用吗
  • 成都网站建设推广在成都百度
  • 买了域名就可以做网站网络营销推广公司
  • python做网站效率百度下载安装官方下载
  • ppt超链接到网站怎么做百度手机助手最新版下载
  • 常见网站漏洞seo怎么优化效果更好