原创 poj 2253 (二分+判斷圖連通)

題意:給出n個島的座標,要從第一個到跳到第二個島,跳的時候有個距離限制,求出這個距離的最小值。 思路:剛開始限制距離爲兩島的直接距離,用二分每得到一個距離mid,判斷1個2是否能連通。就求出最小的限制距離了。 #include<

原创 hdu 3917 (最大權閉合圖)

題意:政府有一些路,m個公司來修,每個公司修路要交稅給政府,修路政府要付給公司費用,求政府能獲得的最大利潤,如果選擇一個公司負責一個項目,那麼該公司負責的其它項目也必須由他負責,並且與其有相連關係的公司也必須選擇。。 建圖:利潤=所有公司

原创 hdu 3879 (最大權閉合圖)

題意:金典的最大獲利問題,通信公司可以在n個地方建立信號站,每個信號站的建立要一定的費用,有m個要求,每個要求是如果兩個地方都建立了信號站就會獲利,求出公司的最大獲利。 建圖:獲利邊的選擇要依賴點。源點跟邊相連容量爲邊的獲利,每個點跟匯點

原创 poj 3259 (Bellman_Ford判斷負環)

題意:John的農場裏n塊地,m條路連接兩塊地,k個蟲洞,蟲洞是一條單向路,不但會把你傳送到目的地,而且時間會倒退Ts。我們的任務是知道會不會在從某塊地出發後又回來,看到了離開之前的自己。 思路:蟲洞連接的邊是負權值的,如果途中存在一個負

原创 hdu 4322 (費用流,巧妙建圖)

題意:如果一個小孩得到他喜歡的一種糖果他會得到k個歡樂值,如果得到不喜歡的糖果只能得到1個歡樂值,每個孩子只有當歡樂值達到一定數量時纔會高興。能不能使所有的孩子都高興。 分析:如果一種糖果沒人喜歡的話,不管把它給誰效果都是一樣的,所以只需

原创 hdu 4122 (線段樹)

題意:月餅商店從2000年1月1日0時開始開m個小時,只能在整點的時候才能做月餅,給出每個時間點做一個月餅的費用,做月餅的時間不計,有n個訂單,取貨的日期和數量,商店有冷藏庫,容量無限大,月餅的冷藏時間有限,冷藏是要花錢的,求出這n個訂單

原创 hdu 4801 長沙現場賽K題

題意:給出一個魔方的狀態,求出在n次轉動內最多可以成功多少個面。 思路:現場賽時,wx翻譯完題目我們就知道是深搜,wx說只需要轉三個面。複雜度就是(2*3)^7.當時我想着可以優化一下,一個面沿一個方向轉一次後,就不要沿另一個方向轉,複雜

原创 poj 2429 (分解質因子)

題意:給出兩個數的最大公約數g,最小公倍數lcm,求出這兩個數,有多種組合的,求出和最小的一組。 思路:g=gca(a,b);a*b=lcm*g;a/g*b/g=lcm/g;gcd(a/g,b/g)=1;就是把lcm/g分解成兩個互質的因

原创 hdu 4712 (隨機算法)

第一次聽說隨機算法,在給的n組數據間隨機取兩個組比較,當隨機次數達到一定量時,答案就出來了。 #include<stdio.h> #include<stdlib.h> #include<string.h> #define min(

原创 poj 3155 (最大密度子圖)

題意:一個公司有n個人,給出了一些有衝突的人的對數(u,v),公司決定裁人,那麼總裁現在要裁掉衝突率最高的那些人(衝突率=在這些人中存在的衝突數/人數)。就是求出一些點,這些點之間的邊數/點數最大。最大密度子圖。 思路:胡伯濤的論文《最小

原创 poj 3641&hdu 1905(僞素數判定)

題意:給出p,a問p是不是以a爲底的僞素數,如果p不是素數判斷,是否a^p%p==a #include<iostream> #include<algorithm> #include<math.h> #include

原创 poj 3216 (最小路徑覆蓋)

題意:有n個地方,m個任務,每個任務給出地點,開始的時間和完成需要的時間,問最少派多少工人去可以完成所有的任務。給出任意兩點直接到達需要的時間,-1代表不能到達。 思路:很明顯的最小路徑覆蓋問題,剛開始腦子抽了,沒求最短路直接就做了,題目

原创 poj 3352 (雙聯通縮點)

題意:給出一個無向聯通圖,求最少添加幾條邊讓圖是雙聯通圖。 思路:先Tarjan縮點,(求出度數爲1的雙聯通分量的個數+1)/2; #include<stdio.h> #include<string.h> const int

原创 hdu 4714 (樹形dp)

題意:給一棵樹,刪除一條邊和增加一條邊代價都是1,問把所有節點連成環,最少的代價。 思路:可以將樹刪成ans+1條鏈,答案就是ans+ans+1。如果一個節點的分支數大於1的話,就把該點與父節點的邊刪點,該節點形成的鏈數就是son-1。樹

原创 hdu 4791 長沙現場賽A題

題意:打印紙張,隨着張數的增加,價格非遞增,給出m個詢問打印的張數,求最小的花費。 思路:找到張數所在的區間,最大的花費就是該區間的價格*張數,如果要打印多餘的張數,就在後面的區間找,因爲後邊的區間都是張數大於目標張數,所以去區間的最小值