hdu 5305,friends
1<=n<=8,這個範圍的資料不僅可以考慮位壓縮更可以階乘級別的暴力列舉或搜尋了。
本題主要和邊有關,所以點位壓縮沒什麼好方法,邊位壓縮也沒什麼意義,而且邊是o(n^2)級別的也不可能壓。
那就考慮列舉,首先要思考最壞情況有多少種答案,粗略算一下,發現頂多也就c(8,4)*c(7,3)*c(6,2)*c(5,1)=183750,100組資料可以接受。(事實上高估了很多,畢竟階乘的東西差一點就差很多,更準確的計算應該是c(7,3)*c(6,2)*c(5,1)=2625左右)。
由於點邊之間的關係是乙個拓撲結構,所以很難一對一地列舉到所有情況,只能通過搜尋加剪枝的方式,看看能不能用較低的搜尋量完成列舉。
我們已經知道有效的答案不是很多,接下來就該考慮如何列舉以減少無用的搜尋。
既然主要問題是邊二選一而不是點,那我們最好考慮列舉邊,然後以點為限制條件,為了盡量較少搜尋量,限制條件盡量用完,即乙個點所連的邊的種類必須各佔一半。那就在搜尋過程中記錄以確定的點連邊的情況,然後列舉邊的選擇,一直暴搜就好了,事實上效果很好,暴搜的效率和邊的順序有關,相關的邊放在一起剪枝效果更大,比如可以按點順序來搜,不過都差不多了。
**:#includeusing namespace std;
const int maxn = 10;
const int maxm = 100;
int n,m;
int u[maxm],v[maxm];
int id[maxn],a[maxn],b[maxn];
int cnt;
void dfs(int cur)
if(a[u[cur]]
hdu 5305 搜尋 剪枝)
題意 有n個人 n 8 每個人有一定數量的朋友,而和朋友的關係是線上朋友或者線下朋友 只能是其中一種 問每個人的線上朋友數量都等於線下朋友數量的方法數有多少。做法 建成乙個圖,如果邊的數目是奇數或者有人的度數是奇數,那個方法數肯定是0。否則,我們可以將邊進行染色。假設黑色代表兩個人之間是線上朋友,白...
hdu 5961 傳遞(暴力搜尋)
我們稱乙個有向圖g是傳遞的,當且僅當對任意三個不同的頂點a,若g中有 一條邊從a到b且有一條邊從b到c 則g中同樣有一條邊從a到c。我們稱圖g是乙個競賽圖,當且僅當它是乙個有向圖且它的基圖是完全圖。換句 話說,將完全圖每條邊定向將得到乙個競賽圖。下圖展示的是乙個有4個頂點的競賽圖。現在,給你兩個有向...
hdu5305dfs對邊的搜尋,倆個陣列記錄度數
自己做的時候一直想把這個無向圖轉化為有向圖,然後就可以利用入度 出度來判斷做題了,然而根本不需要,用倆個陣列分別記錄,並讓初始值都等於總度數的一半,然後進行搜尋,如果可以搜尋到最後 則這時所有點的倆個度數都為零,即offline等於online。記得思路不通的時候試著從反面想下 include in...