原创 HDU 3836 Equivalent Sets(強連通分量+縮點)

題目鏈接題意:告訴你有n個集合,下面m條輸入表示x是y的子集,求至少還要幾步,能夠確保這n個集合相等。    題目翻譯過來也就是知道n個點,m條有向邊,問至少需要加多少條邊才能構成一個強聯通圖思路:先找到所有的強連通分量,把他們縮點,最後

原创 線段樹(轉)

原文鏈接線段樹代碼中如何實現?(0)定義:[cpp] view plain copy    #define maxn 100007  //元素總個數  int Sum[maxn<<2],Add[maxn<<2];//Sum求和,Add爲懶

原创 【POJ - 2195】Going Home(KM算法求二分圖最小權匹配)

題目鏈接題意:給一張地圖,標記num個人和房子的位置,每個房子只能住一個人,求所有人都進入房子至少需要多少步解析:首先計算出每一個人到每一個房子的距離,然後就是套用KM求最佳匹配的板子。不過KM算法不好理解,這裏借用一位大佬的博客:博客鏈

原创 CCF 201703-4(最小生成樹Kruskal)

題目:問題描述  A市有n個交通樞紐,其中1號和n號非常重要,爲了加強運輸能力,A市決定在1號到n號樞紐間修建一條地鐵。  地鐵由很多段隧道組成,每段隧道連接兩個交通樞紐。經過勘探,有m段隧道作爲候選,兩個交通樞紐之間最多隻有一條候選的隧

原创 CCF 201609-4(最短路徑SPFA的變形)

問題描述  G國國王來中國參觀後,被中國的高速鐵路深深的震撼,決定爲自己的國家也建設一個高速鐵路系統。  建設高速鐵路投入非常大,爲了節約建設成本,G國國王決定不新建鐵路,而是將已有的鐵路改造成高速鐵路。現在,請你爲G國國王提供一個方案,

原创 CCF 201612-4(DP)

題目:問題描述  給定一段文字,已知單詞a1, a2, …, an出現的頻率分別t1, t2, …, tn。可以用01串給這些單詞編碼,即將每個單詞與一個01串對應,使得任何一個單詞的編碼(對應的01串)不是另一個單詞編碼的前綴,這種編碼

原创 CCF 201709-5(樹狀數組)

題目:問題描述  小蔥喜歡除法,所以他給了你N個數a1, a2, ⋯, aN,並且希望你執行M次操作,每次操作可能有以下兩種:  給你三個數l, r, v,你需要將al, al+1, ⋯, ar之間所有v的倍數除以v。  給你兩個數l, 

原创 學習筆記(散列法)

    多數散列函數都假定關鍵字的全域爲自然數集,因此我們首先想辦法將關鍵字轉換爲自然數(如標識符pt,首先用ASCII碼轉換,p=112,t=116,再以128爲基數來表示,即pt=112*128+116=14452)。下面介紹兩種散列

原创 計數排序

  計數排序是一種非基於比較的穩定的排序算法。在一定條件下,運行時間爲O(n)。基本思想:對於給定的輸入序列中的每一個元素x,確定該序列中值小於x的元素的個數(此處並非比較各元素的大小,而是通過對元素值的計數和計數值的累加來確定),之後將

原创 [Apio2009]Atm 強聯通分量+SPFA

原題鏈接題意:有N個路口和M條單行道,告訴了每個路口ATM機中的錢數,市中心S的位置,P個酒吧的位置。求從市中心出發,途徑ATM機獲得錢(可重複走同一條路,同一個路口),最後在一個酒吧中消費,問最多可以獲得多少錢。思路:先找強聯通分量進行

原创 快排思想

對於數組A[p...r]進行快排:    主要思想:將數組A[p...r]劃分爲A[p...q-1]和A[q+1...r],使得左區間的每一個元素小於A[q],右區間每一個元素大於A[q]。    實現方法:(僞代碼)      QUIC

原创 天梯L1-020. 帥到沒朋友(搜索)

思路:用一個vis數組表示該id是否出現過,最後只要判斷vis[i]是否爲0就行注意:    1.如果k爲1,則此時不應改變對應vis的值(因爲此時他也沒有好友)    2.因爲id從0開始,輸出時候不足五位的要補0AC代碼:#inclu

原创 筆記(紅黑樹)

紅黑樹是一棵二叉搜索樹,它確保沒有一條路徑會比其他路徑長出2倍,滿足以下紅黑性質:    1.每個結點或紅或黑    2.根結點是黑色的    3.每個葉結點(NIL)是黑色的  (如果一個結點沒有子結點或父結點,則該結點相應指針屬性的值

原创 天梯L1-006. 連續因子 (貪心+暴力)

思路:由於13!>2^31,所以最大長度不會超過12,那麼我們就從長度爲12開始搜索。之後就從2開始累乘,看是否滿足條件。注意到因子中最大的不可能超過sqrt(n),所以可以做一些剪枝注意點:素數!!AC代碼:#include<iostr

原创 筆記(帶權中位數)

(圖截自算法導論)先做下筆記,記住結論。尋找帶權中位數方法:假設結構爲sstruct Node{ double value; double weight;}nodes[maxn];則1.按照座標從小到大排序(用快排)2.計算出總的權值su