P3723 Conscription java实现,又一道克鲁斯卡尔
题目链接:Comscription
感觉没问题但是不知道为什么会Runtime Error :nu:
-----找了一个多小时,还是不知道输入有什么问题.
还好poj的discuss中有一个java写的代码.
把输入替换了一下就OK了,尴尬.....
:xinsui:但是仍旧不知道为什么读输入会出现Runtime Error,怎么会有错呢.....
老代码:
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.PriorityQueue;
import java.util.StringTokenizer;
public class Main {
static int[] p;
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int T = Integer.parseInt(st.nextToken());
for(int tcase=0;tcase<T;tcase++){
br.readLine();
st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
int R = Integer.parseInt(st.nextToken());
p = new int[N+M+10];
for(int i = 0;i<N+M+10;i++)
{
p[i] = i;
}
int g;
int b;
int d;
PriorityQueue<Relation> pq = new PriorityQueue<Relation>();
for(int i = 0;i<R;i++){
st = new StringTokenizer(br.readLine());
g = Integer.parseInt(st.nextToken());
b = Integer.parseInt(st.nextToken())+N;
d = Integer.parseInt(st.nextToken());
pq.add(new Relation(g,b,d));
}
Relation pollRelation;
long value = 0;
while (!pq.isEmpty()){
pollRelation = pq.poll();
if(!connect(pollRelation.x,pollRelation.y)){
union(pollRelation.x,pollRelation.y);
value+=pollRelation.d;
}
}
System.out.println(10000*(M+N)-value);
}
}
private static int find(int a){
if(p[a] == a){
return p[a];
}
else{
return p[a] = find(p[a]);
}
}
private static void union(int a,int b){
int A = find(a);
int B = find(b);
if(A != B){
p[A] = B;
}
}
private static boolean connect(int a,int b){
int A = find(a);
int B = find(b);
return A == B;
}
}
class Relation implements Comparable
int x;
int y;
int d;
public Relation(int x, int y, int d) {
this.x = x;
this.y = y;
this.d = d;
}
@Override
public int compareTo(Relation o) {
return o.d-this.d;
}
}
AC代码:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Comparator;
import java.util.StringTokenizer;
public class Main3 {
static int[] p;
static StringTokenizer st;
public static void main(String[] args) throws Exception {
sc.init(System.in );
int T = sc.nextInt();
while (T-- > 0) {
int N = sc.nextInt();
int M = sc.nextInt();
int R = sc.nextInt();
p = new int[N+M+1];
for(int i = 0;i<N+M+1;i++)
{
p[i] = i;
}
int g;
int b;
int d;
int[][] array = new int[R][3];
for (int i = 0; i < R; i++) {
for (int j = 0; j < 2; j++) {
array[i][j] = sc.nextInt();
}
array[i][2] = sc.nextInt();
}
Arrays.sort(array, new Comparator<int[]>() {
@Override
public int compare(int[] ints, int[] t1) {
return t1[2]-ints[2];
}
});
long value = 0;
int[] each;
for(int i = 0;i<array.length;i++){
each = array[i];
if(!connect(each[0],each[1]+N)){
union(each[0],each[1]+N);
value+=each[2];
}
}
System.out.println(10000*(M+N)-value);
}
}
private static void union(int a ,int b){
int A = find(a);
int B = find(b);
if(A != B){
p[A] = B;
}
}
private static boolean connect(int a,int b){
int A = find(a);
int B = find(b);
return A==B;
}
private static int find(int a){
if(p[a] == a){
return p[a];
}
else{
return p[a] = find(p[a]);
}
}
}
class sc {
static BufferedReader reader;
static StringTokenizer tokenizer;
/** call this method to initialize reader for InputStream /
static void init(InputStream input) {
reader = new BufferedReader(
new InputStreamReader(input) );
tokenizer = new StringTokenizer("");
}
/* get next word */
static String next() throws IOException {
while ( ! tokenizer.hasMoreTokens() ) {
//TODO add check for eof if necessary
tokenizer = new StringTokenizer(
reader.readLine() );
}
return tokenizer.nextToken();
}
static int nextInt() throws IOException {
return Integer.parseInt( next() );
}
}

浙公网安备 33010602011771号