如何理解POJ 1986 java代码实现
发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,今天就跟大家聊聊有关如何理解POJ 1986 java代码实现,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。package pro.yao10
千家信息网最后更新 2026年10月31日如何理解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安全错误
数据库的锁怎样保障安全
手冲咖啡和咖啡机区别
互联网新科技
互联网的科技
网络科技有限互联网
关于新基建和互联网科技
与互联网科技公司
互联网科技的发展
互联网科技上市公司
现代科技和互联网有关系吗
互联网科技博主是什么意思
团飞科技与伯堂互联网服务平台
哈尔滨屹滨互联网科技有限公司
江苏互联网智能科技软件
互联网相关科技技术
工业互联网科技成果转化
福州德业互联网科技
银川新华互联网科技学校是国营吗
众联互联网络科技
六子台科技互联网展会
互联网 科技节活动 微视频大赛
精品咖啡豆
广州大一互联网络科技有限公司
上海致骋互联网科技
重庆科技学院互联网
承德科技产业互联网发展
荆州市昕露互联网络科技有限公司
想开互联网科技公司怎么样
恒生互联网科技业指数调整周期
怎样加入科技互联网
四川互联网展示科技馆设计