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

路由侠怎么做网站映射观澜小学 网站建设

路由侠怎么做网站映射,观澜小学 网站建设,wordpress always,手机版桂林生活网官网二分图当且仅当一个图中不含奇数环 1.染色法 简单来说#xff0c;将顶点分成两类#xff0c;边只存在于不同类顶点之间#xff0c;同类顶点之间没有边。 e.g. 如果判断一个图是不是二分图#xff1f; 开始对任意一未染色的顶点染色。 判断其相邻的顶点中#xff0c;若未…二分图当且仅当一个图中不含奇数环 1.染色法 简单来说将顶点分成两类边只存在于不同类顶点之间同类顶点之间没有边。 e.g. 如果判断一个图是不是二分图 开始对任意一未染色的顶点染色。 判断其相邻的顶点中若未染色则将其染上和相邻顶点不同的颜色。 若已经染色且颜色和相邻顶点的颜色相同则说明不是二分图若颜色不同则继续判断。 bfs和dfs可以搞定  注意如果有三个点另外成环整个环是一个孤立环其他都满足二分图但是这个孤立不满足二分图二分图的点不一定连通。所以要遍历每一个点。 1.dfs思路 #include iostream #include cstring #include algorithm using namespace std; const int N200010; int e[N], ne[N], idx;//邻接表存储图 int h[N]; int n,m; int color[N]; void add(int a, int b)//邻接表插入点和边 {e[idx] b, ne[idx] h[a], h[a] idx; } bool dfs(int a,int c){color[a]c;for(int ih[a];i!-1;ine[i]){int je[i];if(!color[j]){if(!dfs(j,3-c)){return false;}}else{if(color[j]c){return false;}}}return true; } int main(){memset(h, -1, sizeof h);//初始化邻接表cin n m;for(int i 1; i m; i)//读入边{int a, b;cin a b;add(a, b), add(b, a);}for(int i1;in;i){if(!color[i]){if(!dfs(i,1)){puts(No);return 0;}}}puts(Yes);return 0; } 2.bfs思路 #include iostream #include cstring #include algorithm #include queue using namespace std; const int N200010; int e[N], ne[N], idx;//邻接表存储图 int h[N]; int n,m; int color[N];queueint q; void add(int a, int b)//邻接表插入点和边 {e[idx] b, ne[idx] h[a], h[a] idx; } bool bfs(int a){color[a]1;q.push(a);while(q.size()){auto tq.front();q.pop();for(int ih[t];i!-1;ine[i]){int je[i];if(!color[j]){color[j]3-color[t];q.push(j);}else if(color[j]color[t]) return false;}}return true; } int main(){memset(h, -1, sizeof h);//初始化邻接表cin n m;for(int i 1; i m; i)//读入边{int a, b;cin a b;add(a, b), add(b, a);}for(int i1;in;i){if(!color[i]){if(!bfs(i)){puts(No);return 0;}}}puts(Yes);return 0; } 2.匈牙利算法 要了解匈牙利算法必须先理解下面的概念 匹配在图论中一个「匹配」是一个边的集合其中任意两条边都没有公共顶点。 最大匹配一个图所有匹配中所含匹配边数最多的匹配称为这个图的最大匹配。 这篇文章把这个算法讲的很有意思  趣写算法系列之--匈牙利算法_匈牙利算法基本原理-CSDN博客  简单来说就是 遍历所有男生 让该男生考虑所有心动女生 如果当前女生单身或者该女生的对象找了备胎该女生就接受该男生 最坏时间复杂度 O(nm)和其它最大流问题一样实际比较快 #include cstring #include iostream #include algorithmusing namespace std;const int N 510, M 100010;int n1, n2, m; int h[N], e[M], ne[M], idx; int match[N]; bool st[N];void add(int a, int b) {e[idx] b, ne[idx] h[a], h[a] idx ; } bool find(int x){for(int ih[x];i!-1;ine[i]){int je[i];if(!st[j]){st[j]1;if(match[j]0||find(match[j])){match[j]x;return true;}}}return false; } int main() {scanf(%d%d%d, n1, n2, m);memset(h, -1, sizeof h);while (m -- ){int a, b;scanf(%d%d, a, b);add(a, b);}int res 0;for (int i 1; i n1; i ){memset(st, false, sizeof st);if (find(i)) res ;}printf(%d\n, res);return 0; } 在上述代码中有一个令人费解的东西就是st数组的作用其实直白的理解如果你每次不把st重新置为false那剩下的人一看到前面的妹子st已经为true不去让妹子的对象换掉这个妹子直接就放弃了会影响最后结果。 我们通过一个实际案例理解一下 不难看出st数组主要是在两个人连接了一个妹子的的时候才有用 这个st的存在让find在本次找的时候原来的那个男生不会再找这个妹子只会找其他的。 还有一种理解st的理解可以参考操作系统中锁的概念。假如说左边的是进程右边的是资源。当进程i要访问资源j时为了避免其他进程在此时访问资源j需要对资源j加一个“锁”即st[j] true。当进程i访问完资源时为了让后续其他进程也能访问资源需要把锁解开即memset(st, false, sizeof st)。
http://www.dnsts.com.cn/news/138030.html

相关文章:

  • 天津住房与城乡建设部网站下列哪个软件属于网页制作软件
  • c2c网站建设策划书网页设计师的职业规划
  • 网站的衡量标准优秀电商网站
  • 网站推广与搜索引擎优化看国外的视频用什么浏览器
  • 做机械设备的做哪个网站推广较好书店网站建设策划书总结
  • 做网站的生产方式佛山+客户端官网
  • 什么是优化问题长沙seo网站排名优化公司
  • 网站建设教程集体苏州久远网络湖南大钧工程建设有限公司网站
  • 开发公司认领工程网站做软件工资高还是网站
  • 网站调用字体wordpress咋建站
  • 徐州地区网站建设网络营销推广建议
  • 哈尔滨网站制作方案wordpress手机 ios
  • 成都专业网站设计公司建网站的步骤和方法
  • 做地方网站能赚钱吗怎么做婚庆网站平台
  • 临沂企业网站做网站开发要学什么语言
  • g4560做网站服务器大型企业网站设计案例
  • 成都企业网站设计网站修改联系方式
  • 卫生院网站建设做织梦网站之前要新建数据库吗
  • 手机网站设计框架wordpress佣金分成
  • 怎么做网站支付php网站访问很慢
  • 邹平做网站的联系方式新乡市做网站
  • 什么是网站制作app网站开发进阶实训报告
  • 如何提高网站的功能性建设中国常用网站
  • 无锡网站建设 君通科技wordpress 主页地址函数
  • 广州知名网站建设企业文化ppt
  • 网址站点出现异常怎么办php按步骤做网站
  • 做贸易常用的网站余姚厂家高端网站设计
  • 济南制作网站公司哪家好网站建设现况分析
  • 建设银行手机外汇网站淘宝客如何建立自己的网站
  • 培训校园网站建设简报免费信息发布平台网站