件名の説明:
n個の点、Nエッジ、最小リングを見つけます
まず、我々は、少なくとも一つの環、M及びM点側(n個の点のより大きなパターンに分けて接続に従って)ことを知っています
リング上そうおそらく、その後、変形しています
そこで、我々は、ポイントを選択することができ、リングのエンドポイントの1つに到達するためにリング、および二回を入力することができ、
ループの長さNWは - (DFN [ST] -1)
環が二方向に入力することができるので、直接還元それほど確かではない、(鎖の長さは、点を含むことになる)、なお
そして、あなたは快適なコードを書くことができます
書式#include <cstdioを> する#include <cstdlib> 書式#include <アルゴリズム> 使用して 名前空間をSTD。 int型nは、ANS、CNT。 CONST INT N = 2E5 + 3 。 INT NX [N]、STP [N]。 ボイド BFS(INT ST) { int型 MN = CNT。 しばらく(!STP [ST]) STP [ST] = ++ CNT、ST = NX [ST]。 もし(STP [ST]> MN) ANS =分(ANS、CNT-STP [ST] + 1 )。 } int型のmain() { scanf関数(" %のD "、&N); ANS = N。 以下のために(INT iが= 1 ; I <= N; I ++ ) のscanf(" %dの"、およびNX [I])。 以下のために(int型私は= 1 ; I <= N; I ++ ) の場合(!STP [i])と BFS(I); printf(" %dの\ n " 、ANS)。 リターン 0 ; }