私はそれをメモしておき説明を読んだ後、ないTaccaこの質問を行うように必要な最小値は、問題の2015 NOIPリングです!
後、我々はリングのすべてを見つけなければならない最低限のループを必要とし、リングの方法でも、すでに上の場合は、いないこの時点では、環を形成して、彼らは今接続しているかどうか、私は読んで父親を見つけることです彼らはその後、何人かの人々が存在する場合ので、この辺が含まれているリングは、あなたが今、あなたはそれが間違って鳴りませんよりも小さい場合、それらを接続しないでください、お願いしますと推定され、それ以外の場合は、サイクルを死んでしまう、2を接続する必要があります?我々は、ビューのポイントを通過すると父は、唯一のすべてのポイントのためにそこにあるので(これは、この質問はので、この場合には、特別な数字ではありません、私と私の父それはもはやすることができ、父s」はすでに知っていましたこの後、リングの他の側面があります)、当然のことながら、この時点では、父親が異なるIncorporatedの私を取った場合
1の#include <iostreamの> 2の#include <ベクトル> 3の#include <アルゴリズム> 4の#include <CStringの> 5の#include <climits> 6 使用して 名前空間をSTD。 7 INT FA [ 200010 ]。 8 INT RES = INT_MAX。 9 INT CNT = 0 。 10 int型の検索(int型X) 11 { 12 CNT ++ 。 13 であれば(FA [X] == X) 14 リターンFA [X]。 15 他の 16 のリターンのfind(FA [X]); 17 } 18 のint main()の 19 { 20 INT N。 21 CIN >> N。 22 のために(INT iは= 1 ; iが<= N; I ++ ) 23 のFA [I] = I。 24 のために(INT iは= 1 ; iが<= N; I ++ ) 25 { 26 、CNT = 0 。 27 INT トン。 28 cinを>> トン。 29 もし(==)(Tを見つけるI) 30 { 31の RES = 分(RES、CNT)。 32 } 33 他の 34 { 35 [I] = FA T。 36 } 37 } 38 COUT << RES。 39 リターン 0 ; 40 }