[[原文:http://poj.org/problem?id=1944]] ---- ''時間制限'':1000ミリ秒 ''メモリ制限'':30000KB &br; *問題 [#cfd64d6a] 農夫ジョンは、彼の N (1 <= N <= 1,000) 個の納屋を新しい光ファイバー網で繋ぎたいと思っている。納屋には 1 から N まで順に番号が付けられている。しかし、納屋は大きい池の端に円状に位置しているため(つまり、納屋 N は納屋 1 とも隣接している)、彼は互いに隣接している納屋をつなぐことしかできない。 しかし、互いに通信したいと思っている牛の組は限られているため、ジョンはすべての納屋をつなぐ必要はない。彼は、できるだけ少ない数の接続で、通信したいすべての牛の組が光ファイバー網を用いて通信できるようにしたい。 互いに通信できる必要のある納屋の組のリストが与えられた時、引かれる通信線の数の最小値を決定せよ。例えば、納屋 1 から 3 まで通信したいとき、通信線を納屋 1-2, 2-3 に引く必要がある。或いは、N=3 のときは単に納屋 3-1 に引くだけもでよい。 *入力 [#afb9861f] 1 行目:2 つの自然数 N, P (1 <= P <= 10,000)。P は通信するペアの数を表す。 2 ~ P+1 行目:互いに通信したいと思っている納屋の組を表す 2 つの整数。入力中に同じ組が複数回現れることはない。 *出力 [#j4cda4cb] ジョンがつなぐ必要のある通信線の最小数を表す整数のみを含む 1 行を出力せよ。 *入力の例 [#d959ea95] 5 2 1 3 4 5 *出力の例 [#tb58a346] 3 * ヒント [#wb6e39ed] 入力例では、納屋 1-2, 2-3, 4-5 に通信線を引けばよい。 *出典 [#p8da5a11] USACO 2002 February