原创 LCA 多次詢問 解法總結

題目:N個節點,M次詢問,求兩點間的最近公共祖先 一、並查集+DFS(也叫Tarjan)-------離線O(M+N) #include <cstdio> #include <algorithm> #include <vector>

原创 揹包專輯(轉)

(解題報告本人所寫,博客內容轉自zeroclock) 這短時間看了論文《揹包九講》,看到揹包問題解法中的優美之處也看到揹包問題在現實中的應用,總結出一句話:揹包問題值得一看。     揹包問題可以概括爲這樣的模型:有若干種選擇,每種選擇

原创 分佈式計算、網格計算和雲計算

1、分佈式計算 所謂分佈式計算是一門計算機科學,它研究如何把一個需要非常巨大的計算能力才能解決的問題分成許多小的部分,然後把這些部分分配給許多計算機進行處理,最後把這些計算結果綜合起來得到最終的結果。最近的分佈式計算項目已經被用於使用世界

原创 hdu4628狀態壓縮DP

這題學到了一個方法吧: 如果要枚舉集合S的子集: for(int i = S; i > 0; i=(i-1)&S) 如果要枚舉包含S的集合: for(int i = S; i < (1<<n); i = (i+1)|S) 很巧的方法,以前

原创 HDU 4679 Terrorist’s destroy (拆邊+樹的直徑)

給一棵樹,每條邊上都有一個權值,去掉樹上任意一條邊之後,分成兩個子樹,兩個子樹的最長路與這條邊上的權值相乘,的到一個乘積。問去掉那一條邊可以使這個乘積最小。 首先找到樹上的最長路,那麼刪邊的時候有兩種情況: 1. 這條邊不是最長路上的邊

原创 HDU 1733 [Escape] 分層圖網絡流+枚舉時間

題目大意:給定一個矩陣,'.'表示空位,'X'表示人,'#'表示牆,'@'表示門,每個位置至多隻能站一個人,人不能穿越牆,人能從門中出去。每個人每分鐘只能上下左右移動一步,問最少需要多少時間讓所有的人出去。 思路: (1):把每個點按照

原创 編程之美-中國象棋將帥問題

首先,我們歸納總結一下展開原理, 對於 a*b = i ,我們可以用如下公式展開     loop1=i%b;     loop2=(i/b)%a    其中loop1是內層循環,loop2是外層循環     那麼如果 a 本身就是 k

原创 hdu4714 Tree2cycle 樹形DP

題目是問把一棵樹通過剪邊、加邊形成一個環的最小代價。 分成兩步,先把樹剪成一些鏈,再把鏈連接成一個環。 My Code: //dp[u][0]表示u節點是所在鏈的端點時,以u節點爲根節點的子樹形成的最少的切邊數。 //dp[u][1]表示

原创 十個利用矩陣乘法解決的經典題目

 這篇文章很經典,我是從這兒http://www.matrix67.com/blog/archives/276/看到的!   好像目前還沒有這方面題目的總結。這幾天連續看到四個問這類題目的人,今天在這裏簡單寫一下。這裏我們不介紹其它有關矩

原创 01分數規劃

【關鍵字】 0/1分數規劃、最優比率生成樹、最優比率環 【背景】  根據樓教主的回憶錄,他曾經在某一場比賽中秒掉了一道最優比率生成樹問題,導致很多人跟風失敗,最終悲劇。可見最優比率生成樹是多麼兇殘的東西,但是這個東西只要好好研究半天就可以

原创 tarjan求強連通分量模板

在有向圖中,如果兩個頂點間至少存在一條路徑,稱兩個頂點強連通。 如果有向圖G的每兩個頂點都強連通,稱G是一個強連通圖。 非強連通圖有向圖的極大強連通子圖,稱爲強連通分量。 而用tarjan算法可以起求出各個強連通分量,然後再把強連通分

原创 【HDU3721】枚舉+最長路

題意:給你一顆n個節點n-1條邊的樹,每條邊都有一個權值,現在讓你任意移動一條邊然後把這條邊連接到任意兩個點上,最後問你怎樣移動才能使樹上相距最遠的兩個點距離最小。   思路:先求出樹的最長路,然後枚舉移動最長路上的所有邊,移走這條邊後,

原创 樹形DP總結(轉)

樹,一種十分優美的數據結構,因爲它本身就具有的遞歸性,所以它和子樹見能相互傳遞很多信息,還因爲它作爲被限制的圖在上面可進行的操作更多,所以各種用於不同地方的樹都出現了,二叉樹、三叉樹、靜態搜索樹、AVL樹

原创 POJ 1895 Bring Them There 分層構圖 求最大流 並輸出路徑

這個題在輸出路徑上上糾結了好久,直到我遇到了下面這個代碼,,堪稱完美! 題目限時5s,只用了1s; Code: //神一樣的思想,神一樣的代碼,我佩服的五體投地!! //題目給出五個正整數n,m,k,s,t。n表示

原创 SPOJ 375. Query on a tree【樹鏈剖分】

http://www.spoj.pl/problems/QTREE/ 給一顆樹,每條邊有一個權值。有兩種操作:1、修改某條邊的值;2、詢問a、b兩點路徑上邊權的最大值。 樹鏈剖分。 #include <cstdio> #include