如何理解POJ 1986 java代码实现
发表于:2025-12-01 作者:千家信息网编辑
千家信息网最后更新 2025年12月01日,今天就跟大家聊聊有关如何理解POJ 1986 java代码实现,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。package pro.yao10
千家信息网最后更新 2025年12月01日如何理解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 List arrayV[]; 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安全错误
数据库的锁怎样保障安全
查询数据库各表记录数
方舟服务器网页管理
金华西林网络技术有限公司
关于净化网络安全的手抄报
智慧导航软件开发
鸿鑫瑞网络技术开发
架设网络服务器
网络公司网络安全管理制度
云服务器第三方管理工具
高科技互联网大屏幕
奉贤区智能化软件开发产品介绍
用友数据库出问题了怎么办
数据库查询伴生
互联网公司域名服务器
网络安全公司的问题
计算机网络技术中的信息是
网络安全入门的书
游戏服务器无法进入
开平数据库修复
网络技术联盟站瑞哥
300738网络安全股票
软件开发广东哪个大学好
计算机网络技术trap
软件开发零基础培训包靠谱吗
服务器g01安全加固费用
软件开发销售属于什么行业
有哪几种数据库的技术
网络安全设备登录调试方法
软件开发周期分为几个阶段
数据库sql更改表名