カウントクリーク
HDU - 5952OJ-ID:
HDU-5952
著者:
Caution_Xの
提出日:
20191110個の
タグ:
DFS、グラフ
説明モデリング:
点の所与の数、エッジ数、及びXポイントの種類の完全な図番号を求め
、それを解決するための主要なステップ:
(1)出発点として点を選択し、ドット記録開始ポイント通信のすべては、DFS(点)は、この時点で存在する2つの完全なグラフ
(2)トラバース(1)、部位指向性通信のために選択された場合に設定完全グラフ、DFS( (1)完全グラフを構成する)が3つのこの時点など完全グラフを有する〜図ポイントができる場合、エンドDFS = Xとき十分図ポイント
(3)リピート(2)すべての点が開始点として使用されるまで、
警告:
各開始点は[2、x]は図の完全な点を含む満たされているので、したがって、異なる出発点の完全なビューを達成するために、Xとは独立しています
ACコード:
書式#include <cstdioを> する#include <アルゴリズム> 書式#include < 文字列の.h> の#include <ビットセット> 使用して 名前空間はstdを、 const int型 MAXN = 105 ; int型の、ANS; BOOL MP [MAXN] [MAXN]。 / * DFSはここで実際には、剪定の多くが含まれている、非常にシンプルになります。ポイントを通過する際に、ポイントのグループは、この点に接続され、参加した識別するだけでなく、平均的にそれを知っているされている、それぞれのポイント浸透は、20を超えることはありません したがって最大トラバーサルの全体的な複雑さは、C(9,20)* 100であります * / ボイド DFS(INT MX、INT V []、INT {CNT) INT NXT [MAXN]; IF(CNT == S){ANS ++; リターン;} ため(INT I = 0 ; I <MX; I ++){ // 点から形成される基をポイントすることができる列挙はすべての点群についてCNT CNT + 1 INT LEN = 0 ; のための(INT J = I + 1、J <MX、J ++ ){ IF(MP [V [I] ] [V [J]]){ // 全て"候補点"は連隊に接続されなければならない点を選択した NXT [LEN ++] = V [J]と、 } } DFS(NXT CNTと称する + 1 )。 } } INT のmain(){ int型T、N、M、U、V。 // freopenは( "in.txt"、 "R"、STDIN)。 scanf関数(" %のD "、&T)。 一方、(T-- ){ scanf関数(" %D%D%D "、&N、&M&S)。 memset(MP、0、はsizeof (MP))。 以下のために(INT iが= 0 ; I <Mを、I ++ ){ scanf関数(" %D%D "、&U&V); mp[u][v]=mp[v][u]=1; } ANS = 0 ; int型 NXT [ 105 ]; のための(INT I = 1 ; I <= N; I ++){ // 列挙各点、この時点で検索を開始するためにグループに依頼しなければならない点 INT LEN = 0 ; のための(INT J = I + 1、J <= N; J ++ ){ IF(MP [I] [J]){ // 全て"候補点"連隊ポイントを選択したために接続されなければならない [NXTを++ LEN = J。 } } DFS(NXTと呼ぶ、1 )。 } printf(" %dの\ n " 、ANS)。 } リターン 0 ; }