結果

問題 No.94 圏外です。(EASY)
ユーザー 37zigen37zigen
提出日時 2016-03-25 02:02:00
言語 Java21
(openjdk 21)
結果
AC  
実行時間 431 ms / 5,000 ms
コード長 1,210 bytes
コンパイル時間 2,312 ms
コンパイル使用メモリ 77,204 KB
実行使用メモリ 51,120 KB
最終ジャッジ日時 2024-06-26 07:54:10
合計ジャッジ時間 10,283 ms
ジャッジサーバーID
(参考情報)
judge2 / judge5
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 152 ms
41,848 KB
testcase_01 AC 149 ms
41,688 KB
testcase_02 AC 152 ms
41,572 KB
testcase_03 AC 137 ms
41,152 KB
testcase_04 AC 209 ms
43,036 KB
testcase_05 AC 260 ms
45,080 KB
testcase_06 AC 276 ms
47,092 KB
testcase_07 AC 316 ms
47,876 KB
testcase_08 AC 356 ms
48,784 KB
testcase_09 AC 420 ms
49,200 KB
testcase_10 AC 407 ms
49,692 KB
testcase_11 AC 417 ms
50,788 KB
testcase_12 AC 431 ms
51,120 KB
testcase_13 AC 418 ms
50,656 KB
testcase_14 AC 420 ms
49,248 KB
testcase_15 AC 431 ms
49,968 KB
testcase_16 AC 419 ms
50,588 KB
testcase_17 AC 406 ms
49,424 KB
testcase_18 AC 427 ms
49,248 KB
testcase_19 AC 403 ms
48,612 KB
testcase_20 AC 160 ms
42,104 KB
testcase_21 AC 150 ms
41,672 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

package yukicoder094;

import java.util.Arrays;
import java.util.Scanner;
public class Main {
	public static void main(String[] args){
		Scanner sc=new Scanner(System.in);
		int n=sc.nextInt();
		double[] x=new double[n];
		double[] y=new double[n];
		UnionFind uni=new UnionFind(n);
		for(int i=0;i<n;i++){
			x[i]=sc.nextDouble();
			y[i]=sc.nextDouble();
		}
		for(int i=0;i<n;i++){
			for(int j=0;j<n;j++){
				if(i==j)continue;
				if((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j])<=100){
					uni.setUnion(i, j);	
				}
			}
		}
		double max=0;
		for(int i=0;i<n;i++){
			for(int j=0;j<n;j++){
				if(i==j)continue;
				if(uni.root(i)==uni.root(j)){
					
					max=Math.max(max,(x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]));
				}
			}
		}
		if(n==0){
			System.out.println(1);
			return;
		}else{
			System.out.println(Math.sqrt(max)+2);
		}


	}
	static class UnionFind{
		int[] f;
		UnionFind(int size){
			f=new int[size];
			Arrays.fill(f, -1);
		}
		boolean setUnion(int x,int y){
			x=root(x);
			y=root(y);
			if(x!=y){
				if(f[x]>f[y]){
					int d=x;
					x=y;
					y=d;
				}
				f[x]+=f[y];
				f[y]=x;
			}
			return x!=y;
		}
		int root(int x){
			return f[x]<0?x:root(f[x]);
		}
	}
}

0