如何理解POJ 1986 java代码实现
发表于:2025-01-23 作者:千家信息网编辑
千家信息网最后更新 2025年01月23日,今天就跟大家聊聊有关如何理解POJ 1986 java代码实现,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。package pro.yao10
千家信息网最后更新 2025年01月23日如何理解POJ 1986 java代码实现
今天就跟大家聊聊有关如何理解POJ 1986 java代码实现,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
package pro.yao10_16LCA;import java.util.*;import java.io.*;/**7 61 6 13 E6 3 9 E3 5 7 S4 1 3 N2 4 20 W4 7 2 S31 61 42 6 * @author XASW * */public class Main { static int T,N,Q,S,E,W,set[],vis[],D[],first[]; static Node[] nodes; static ListarrayV[]; public static void main(String[] args) throws Exception{ BufferedReader bf = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(bf.readLine()); N = Integer.valueOf(st.nextToken()); Q = Integer.valueOf(st.nextToken()); arrayV = new ArrayList[N+1]; nodes = new Node[Q*2 +2]; set = new int[N+1]; vis = new int[N+1]; D = new int[N+1]; first = new int[N+1]; for (int i = 0; i < N+1; i++) { arrayV[i] = new ArrayList (); set[i] = i; first[i] = -1; } for (int i = 0; i < Q *2 +2; i++) { nodes[i] = new Node(); } for (int i = 1; i <= Q; i++) { st = new StringTokenizer(bf.readLine()); S = Integer.valueOf(st.nextToken()); E = Integer.valueOf(st.nextToken()); W = Integer.valueOf(st.nextToken()); arrayV[S].add(new Integer[] {E,W}); arrayV[E].add(new Integer[] {S,W}); } st = new StringTokenizer(bf.readLine()); Q = Integer.valueOf(st.nextToken()); for (int i = 0; i < Q; i++) { st = new StringTokenizer(bf.readLine()); S = Integer.valueOf(st.nextToken()); E = Integer.valueOf(st.nextToken()); add(S,E,i*2); add(E,S,i*2+1); } D[1] = 0; tarjan(1); for (int i = 0; i < Q; i++) { int id = i*2; int u = nodes[id].from; int v = nodes[id].to; int lca = nodes[id].lca; System.out.println(D[u] + D[v]-2*D[lca]); } } static void tarjan(int u) { vis[u] = 1; for (int i = 0; i < arrayV[u].size(); i++) { Integer[] s = arrayV[u].get(i); if(vis[s[0]]==1) continue; D[s[0]] = D[u]+s[1]; tarjan(s[0]); join(s[0],u); } for (int i = first[u]; i != -1; i=nodes[i].next) { int v = nodes[i].to; if(vis[v]==0)continue; nodes[i].lca = nodes[i^1].lca = find(v); } } static void add(int u,int v,int cnt) { nodes[cnt].to = v; nodes[cnt].from = u; nodes[cnt].next = first[u]; first[u] = cnt; } static int find(int a) { if(set[a] == a) { return set[a]; } return set[a] = find(set[a]); } static void join(int a,int b) { int A = find(a); int B = find(b); if(A!=B) { set[A] = B; } } static class Node{ int from; int to; int next; int lca; } }
看完上述内容,你们对如何理解POJ 1986 java代码实现有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。
内容
代码
更多
知识
篇文章
行业
资讯
资讯频道
频道
进一
支持
有关
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
世界神奇宝贝服务器
中瑞深圳互联网科技有限公司
西方国家的网络安全观
清远胜誉网络技术有限公司招聘
不懂软件开发如何做销售
阿里云的服务器的安全机制
数据库如何查入数据代码
陕西服务器公司有哪些虚拟主机
软件开发语言dif
海外代理服务器地址
网络安全作文3000字
完整的软件开发项目管理
科迅网络技术
塔防纪元每天只开一个服务器吗
速达单机服务器打不开
嘉定区质量软件开发项目信息
网络安全进阶教程
信息与网络安全设计与实现
维护网络安全的具体举措
杭州管理软件开发如何收费
oracle数据库安全教程
小学 网络安全的定义
网络安全法人力资源行业解读
数据库引擎 服务器名称为空
red5服务器管理
英国网络安全工程师
三年级网络安全手抄报模板
软件开发it知识图谱
湖州java软件开发自学步骤
烟台有何网络安全事件