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

网站建议怎么写微商城网站建设效果

网站建议怎么写,微商城网站建设效果,南昌好的做网站的公司,佛山网站代运营准度科技有限公司108. 冗余连接 卡码网题目链接(ACM模式)(opens new window) 题目描述 有一个图,它是一棵树,他是拥有 n 个节点(节点编号1到n)和 n - 1 条边的连通无环无向图(其实就是一个线形图)…

108. 冗余连接

卡码网题目链接(ACM模式)(opens new window)

题目描述

有一个图,它是一棵树,他是拥有 n 个节点(节点编号1到n)和 n - 1 条边的连通无环无向图(其实就是一个线形图),如图:

现在在这棵树上的基础上,添加一条边(依然是n个节点,但有n条边),使这个图变成了有环图,如图

先请你找出冗余边,删除后,使该图可以重新变成一棵树。

输入描述

第一行包含一个整数 N,表示图的节点个数和边的个数。

后续 N 行,每行包含两个整数 s 和 t,表示图中 s 和 t 之间有一条边。

输出描述

输出一条可以删除的边。如果有多个答案,请删除标准输入中最后出现的那条边。

输入示例

3
1 2
2 3
1 3

输出示例

1 3

提示信息

图中的 1 2,2 3,1 3 等三条边在删除后都能使原图变为一棵合法的树。但是 1 3 由于是标准输入里最后出现的那条边,所以输出结果为 1 3

数据范围:

1 <= N <= 1000.

我们就可以从前向后遍历每一条边(因为优先让前面的边连上),边的两个节点如果不在同一个集合,就加入集合(即:同一个根节点)。

如图所示,节点A 和节点 B 不在同一个集合,那么就可以将两个 节点连在一起。

如果边的两个节点已经出现在同一个集合里,说明着边的两个节点已经连在一起了,再加入这条边一定就出现环了。

如图所示:

已经判断 节点A 和 节点B 在在同一个集合(同一个根),如果将 节点A 和 节点B 连在一起就一定会出现环。

import java.util.Scanner;public class Main {private static int[] father;public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int pointNum = scanner.nextInt();father = new int[pointNum + 1];init();for (int i = 0; i < pointNum; i++) {join(scanner.nextInt(), scanner.nextInt());}}/*** 并查集初始化*/private static void init() {for (int i = 1; i < father.length; i++) {// 让每个元素指向自己father[i] = i;}}/*** 并查集寻根** @param u* @return*/private static int find(int u) {// 判断 u 是否等于自己,如果是的话,直接返回自己// 如果不等于自己,就寻找根,寻找的时候,反复进行路径压缩return u == father[u] ? u : (father[u] = find(father[u]));}/*** 判断 u 和 v 是否同根** @param u* @param v* @return*/private static boolean isSame(int u, int v) {return find(u) == find(v);}/*** 添加 边 到并查集,v 指向 u** @param u* @param v*/private static void join(int u, int v) {// --if-- 如果两个点已经同根,说明他们的信息已经存储到并查集中了,直接返回即可// 寻找u的根int uRoot = find(u);// 寻找v的根int vRoot = find(v);if (uRoot == vRoot) {// --if-- 如果u,v的根相同,说明两者已经连接了,直接输出System.out.println(u + " " + v);return;}// --if-- 将信息添加到并查集father[vRoot] = uRoot;}}

109. 冗余连接II

卡码网题目链接(ACM模式)(opens new window)

题目描述

有一种有向树,该树只有一个根节点,所有其他节点都是该根节点的后继。该树除了根节点之外的每一个节点都有且只有一个父节点,而根节点没有父节点。有向树拥有 n 个节点和 n - 1 条边。如图:

现在有一个有向图,有向图是在有向树中的两个没有直接链接的节点中间添加一条有向边。如图:

输入一个有向图,该图由一个有着 n 个节点(节点编号 从 1 到 n),n 条边,请返回一条可以删除的边,使得删除该条边之后该有向图可以被当作一颗有向树。

输入描述

第一行输入一个整数 N,表示有向图中节点和边的个数。

后续 N 行,每行输入两个整数 s 和 t,代表这是 s 节点连接并指向 t 节点的单向边

输出描述

输出一条可以删除的边,若有多条边可以删除,请输出标准输入中最后出现的一条边。

输入示例

3
1 2
1 3
2 3

输出示例

2 3

提示信息

在删除 2 3 后有向图可以变为一棵合法的有向树,所以输出 2 3

数据范围:

1 <= N <= 1000.

本题的本质是 :有一个有向图,是由一颗有向树 + 一条有向边组成的 (所以此时这个图就不能称之为有向树),现在让我们找到那条边 把这条边删了,让这个图恢复为有向树。

还有“若有多条边可以删除,请输出标准输入中最后出现的一条边”,这说明在两条边都可以删除的情况下,要删顺序靠后的边!

我们来想一下 有向树的性质,如果是有向树的话,只有根节点入度为0,其他节点入度都为1(因为该树除了根节点之外的每一个节点都有且只有一个父节点,而根节点没有父节点)。

所以情况一:如果我们找到入度为2的点,那么删一条指向该节点的边就行了。

如图:

找到了节点3 的入度为2,删 1 -> 3 或者 2 -> 3 。选择删顺序靠后便可。

但 入度为2 还有一种情况,情况二,只能删特定的一条边,如图:

节点3 的入度为 2,但在删除边的时候,只能删 这条边(节点1 -> 节点3),如果删这条边(节点4 -> 节点3),那么删后本图也不是有向树了(因为找不到根节点)。

综上,如果发现入度为2的节点,我们需要判断 删除哪一条边,删除后本图能成为有向树。如果是删哪个都可以,优先删顺序靠后的边。

情况三: 如果没有入度为2的点,说明 图中有环了(注意是有向环)。

如图:

对于情况三,删掉构成环的边就可以了。

import java.util.*;/* * 冗余连接II。主要问题是存在入度为2或者成环,也可能两个问题同时存在。* 1.判断入度为2的边 * 2.判断是否成环(并查集)*/public class Main {/*** 并查集模板*/static class Disjoint {private final int[] father;public Disjoint(int n) {father = new int[n];for (int i = 0; i < n; i++) {father[i] = i;}}public void join(int n, int m) {n = find(n);m = find(m);if (n == m) return;father[n] = m;}public int find(int n) {return father[n] == n ? n : (father[n] = find(father[n]));}public boolean isSame(int n, int m) {return find(n) == find(m);}}static class Edge {int s;int t;public Edge(int s, int t) {this.s = s;this.t = t;}}static class Node {int id;int in;int out;}public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();List<Edge> edges = new ArrayList<>();Node[] nodeMap = new Node[n + 1];for (int i = 1; i <= n; i++) {nodeMap[i] = new Node();}Integer doubleIn = null;for (int i = 0; i < n; i++) {int s = scanner.nextInt();int t = scanner.nextInt();//记录入度nodeMap[t].in++;if (!(nodeMap[t].in < 2)) doubleIn = t;Edge edge = new Edge(s, t);edges.add(edge);}Edge result = null;//存在入度为2的节点,既要消除入度为2的问题同时解除可能存在的环if (doubleIn != null) {List<Edge> doubleInEdges = new ArrayList<>();for (Edge edge : edges) {if (edge.t == doubleIn) doubleInEdges.add(edge);if (doubleInEdges.size() == 2) break;}Edge edge = doubleInEdges.get(1);if (isTreeWithExclude(edges, edge, nodeMap)) {result = edge;} else {result = doubleInEdges.get(0);}} else {//不存在入度为2的节点,则只需要解除环即可result = getRemoveEdge(edges, nodeMap);}System.out.println(result.s + " " + result.t);}public static boolean isTreeWithExclude(List<Edge> edges, Edge exculdEdge, Node[] nodeMap) {Disjoint disjoint = new Disjoint(nodeMap.length + 1);for (Edge edge : edges) {if (edge == exculdEdge) continue;//成环则不是树if (disjoint.isSame(edge.s, edge.t)) {return false;}disjoint.join(edge.s, edge.t);}return true;}public static Edge getRemoveEdge(List<Edge> edges, Node[] nodeMap) {int length = nodeMap.length;Disjoint disjoint = new Disjoint(length);for (Edge edge : edges) {if (disjoint.isSame(edge.s, edge.t)) return edge;disjoint.join(edge.s, edge.t);}return null;}}


文章转载自:

http://60M6iyNk.xfxnq.cn
http://njgfFrKX.xfxnq.cn
http://JfZvr6SD.xfxnq.cn
http://PnnwQdS6.xfxnq.cn
http://yl6n8fA7.xfxnq.cn
http://kg0t2bc7.xfxnq.cn
http://lAtivEiW.xfxnq.cn
http://DAlZOmpW.xfxnq.cn
http://z9Tc7HEa.xfxnq.cn
http://uLitmW16.xfxnq.cn
http://u7KPoEuZ.xfxnq.cn
http://QYsxvp7b.xfxnq.cn
http://2Ne5FKbf.xfxnq.cn
http://pQKc8kqU.xfxnq.cn
http://F4IasC1i.xfxnq.cn
http://2uEdtXyX.xfxnq.cn
http://CW7IGgXn.xfxnq.cn
http://CaXknROs.xfxnq.cn
http://KqC0yEfW.xfxnq.cn
http://OEkYUzNv.xfxnq.cn
http://2GMWjQz7.xfxnq.cn
http://atHRoUdV.xfxnq.cn
http://J2OVO8d7.xfxnq.cn
http://8W4A3Ahh.xfxnq.cn
http://Y1DU24bc.xfxnq.cn
http://rtkpOlcI.xfxnq.cn
http://rs6u7NIE.xfxnq.cn
http://IakypPgw.xfxnq.cn
http://tDUIN7ee.xfxnq.cn
http://APNpkmTb.xfxnq.cn
http://www.dtcms.com/wzjs/667658.html

相关文章:

  • 网站运营这么做门户网站如何做谷歌seo
  • 360浏览器免费网站邢台123信息网
  • 网站建设 风险防控电商创客网站建设方案
  • 河南科兴建设有限公司网站漫蛙漫画网页版链接
  • 旅游网站建设的功能做图片为主的网站对服务器的要求
  • 毕设 网站开发百度百家官网入口
  • 响应页手机网站源码网站建设空间主机的选择
  • asp 课程教学网站开发做网站字体规范
  • 怀化网站优化公司有哪些开放平台api
  • 怎么建网站?怎么在网上做网站
  • 做资讯网站怎么挣钱免费代理加盟好项目
  • 免费学编程国内网站wordpress清理过期文件夹
  • html5手机网站发布上传网站教程
  • 做网站优化找谁php网站开发个人
  • 网站在建设中无法访问南宁做网站培训
  • 百度seo搜索引擎优化网站seo优化方案设计
  • 宿迁网站建设方案服装设计师接单网站
  • 怎样建立网站免费的室内设计工作室网站怎么做
  • 深圳市营销型网站建设wordpress 产品页 如何关联
  • 中小学网站建设规范企业网站管理系统程序名称
  • sql数据库环境网站搭建教程平台手机app开发
  • 自助外贸网站制作网站不备案怎么做网页淘宝客
  • 怎么把做的网站放到腾讯云里面多少钱 网站建设
  • 婚纱照网站模板石家庄最新新闻
  • wordpress枚举用户名网站优化方法
  • 钦州建设局网站帮别人做非法网站自首
  • 网站的对比怎么样制作网站教程
  • 礼品公司网站模板惠州百优做网站小程序熊掌号
  • 平顶山北京网站建设云浮罗定哪有做网站的
  • 如何开网站建设公司深圳网络营销公司