[BOJ 1922]ネットワーク接続(Java)
質問する
道賢はコンピューターとコンピューターを接続するネットワークを構築しなければならない.しかし残念なことに、ハブがなく、コンピュータとコンピュータを直接接続する必要があります.しかし、みんなが資料を共有するために、すべてのパソコンがつながっています.(aとbの接続はaとbの経路が存在することを意味する.aとbには接続線があり、bとcには接続線があり、aとcには接続線がある.)
しかし、コンピューターに接続する費用を最小限に抑える以上、コンピューターに接続する費用のほかに、他の場所にお金を使うこともできます.これにより、各コンピュータへの接続に必要なコストが達成されると、すべてのコンピュータへの接続に必要な最低コストが出力されます.接続できないパソコンは1台もありません.
入力
第1行は、計算機数N(1≦N≦1000)を与える.
2行目は、接続可能な直線数M(1≦M≦100000)を与える.
3行目からM+2行目まで、各コンピュータをM行に接続するのに必要な費用.この費用の情報は3つの整数であり、a b cが与えられた場合、aコンピュータとbコンピュータを接続する費用はc(1≦c≦10000)であることを示す.aとbは同じかもしれません.
しゅつりょく
すべてのコンピュータを接続するために必要な最小コストを最初のローに出力します.
方法
ソースコード
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.PriorityQueue;
public class NetworkConnect {
static ArrayList<Node>[] network;
static class Node implements Comparable<Node>{
int goal;
int price;
public Node(int goal, int price) {
this.goal = goal;
this.price = price;
}
@Override
public int compareTo(Node o) {
return price - o.price;
}
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
int m = Integer.parseInt(br.readLine());
int result = 0;
network = new ArrayList[n + 1];
for (int i = 0; i <= n; i++) {
network[i] = new ArrayList<>();
}
for (int i = 0; i < m; i++) {
String[] input = br.readLine().split(" ");
int a = Integer.parseInt(input[0]);
int b = Integer.parseInt(input[1]);
int p = Integer.parseInt(input[2]);
network[a].add(new Node(b, p));
network[b].add(new Node(a, p));
}
PriorityQueue<Node> linePriorityQueue = new PriorityQueue<>();
boolean[] visit = new boolean[n + 1];
linePriorityQueue.offer(new Node(1, 0));
while (!linePriorityQueue.isEmpty()) {
Node now = linePriorityQueue.poll();
if (visit[now.goal]) continue;
result += now.price;
visit[now.goal] = true;
for (Node node : network[now.goal]) {
if (!visit[node.goal]) {
linePriorityQueue.offer(node);
}
}
}
System.out.println(result);
}
}
結果
Reference
この問題について([BOJ 1922]ネットワーク接続(Java)), 我々は、より多くの情報をここで見つけました https://velog.io/@wotj7687/BOJ-1922-네트워크-연결-Javaテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol