結果
問題 | No.94 圏外です。(EASY) |
ユーザー |
![]() |
提出日時 | 2014-12-21 22:20:11 |
言語 | C#(csc) (csc 3.9.0) |
結果 |
AC
|
実行時間 | 55 ms / 5,000 ms |
コード長 | 3,133 bytes |
コンパイル時間 | 1,778 ms |
コンパイル使用メモリ | 107,904 KB |
実行使用メモリ | 20,480 KB |
最終ジャッジ日時 | 2024-06-26 07:26:28 |
合計ジャッジ時間 | 3,489 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 22 |
コンパイルメッセージ
Microsoft (R) Visual C# Compiler version 3.9.0-6.21124.20 (db94f4cc) Copyright (C) Microsoft Corporation. All rights reserved.
ソースコード
using System;using System.Collections.Generic;using System.Linq;namespace Yukicoder{public class UF{private int[] _parent;private int[] _rank;public UF(int count){_parent = new int[count];_rank = new int[count];for (int i = 0; i < _parent.Length; i++){_parent[i] = i;}}private int Find(int value){var parent = _parent[value];if (parent == value){return value;}_parent[value] = Find(parent);return _parent[value];}public void Combine(int left, int right){var leftParent = Find(left);var rightParent = Find(right);if (leftParent == rightParent){return;}var leftRank = _rank[leftParent];var rightRank = _rank[rightParent];if (leftRank < rightRank){_parent[leftParent] = rightParent;_rank[rightParent]++;return;}_parent[rightParent] = leftParent;_rank[leftParent]++;}public bool IsSameRoot(int left, int right){return Find(left) == Find(right);}}class Program{static double GetDistance(int x1, int y1, int x2, int y2){var dx = x1 - x2;var dy = y1 - y2;return Math.Abs(Math.Sqrt(dx*dx + dy*dy));}static void Main(string[] args){var n = int.Parse(Console.ReadLine());int[] xPosition = new int[n];int[] yPosition = new int[n];for (int i = 0; i < n; i++){var line = Console.ReadLine().Split(' ').Select(int.Parse).ToArray();xPosition[i] = line[0];yPosition[i] = line[1];}if (n == 0){Console.WriteLine(1);return;}var unionFind = new UF(n);for (int i = 0; i < n; i++){for (int j = 0; j < i; j++){var distance = GetDistance(xPosition[i], yPosition[i], xPosition[j], yPosition[j]);if(distance < 10 + 1e-10){unionFind.Combine(i, j);}}}var maxDistance = 0d;for (int i = 0; i < n; i++){for (int j = 0; j < i; j++){if (unionFind.IsSameRoot(i, j)){var distance = GetDistance(xPosition[i], yPosition[i], xPosition[j], yPosition[j]);maxDistance = Math.Max(maxDistance, distance);}}}Console.WriteLine(maxDistance + 2);}}}