codeforces 272C. Dima and Staircase(線段樹)

題目連結    題目很長,看加猜加Google翻譯才看懂了題目。每級台階的寬都是1,但高不同,並且告訴你了,然後給你m個箱子,長和寬都告訴你,把箱子靠左放,求箱子的底部有多高。   因為都是放在最左邊的,所以只要和最左邊的高度比較,這樣就不用更新線段樹了。代碼://cf 272 C//2013-05-14-20.26#include <stdio.h>using namespace std;const int maxn = 100005;struct node{ int l,

HDU 3829 Cat VS Dog (最大獨立點集)

這道題,要好好寫一下總結。開始的時候,我把貓和狗作為頂點,求最大獨立點集,但是後來發現,這個是有問題的。畫了一個圖,然後類比了範例2,發現這個邊可以重複,也就是說可有不同的小孩的like和dislike是一樣的,那麼這中情況下,刪除一個點,可是多少個孩子高興就不一定了。於是感覺到這建圖是有問題的。仔細分析一下題目,說刪除一個孩子不喜歡的動物,會使這個孩子,但是喜歡這個動物的孩子就會不高興,想讓高興的孩子儘可能的多,那麼就要刪除儘可能少的有孩子喜歡的動物,也就是說孩子和孩子之間是有衝突的,一旦孩子

HDU 2819 Swap (最大二分匹配+輸出路徑)

題目大意就是給出一個矩陣,每個格子裡面要麼是0,

HDU 1151 Air Raid( 最小路徑覆蓋 )

這道題是很經典的最小路徑覆蓋問題。最小路徑覆蓋,是指在有向非循環圖中,選擇最少的點作為起點,使得遍曆圖中所有的點有且僅有一次。因此,每個單獨的頂點可以看做是一條路徑。最小路徑覆蓋=N-原圖的最大二分匹配數。代碼:#include <cstdio>#include <cstring>const int N = 150;int n, m;int bmap[N][N], cy[N];bool vis[N];bool dfs( int u ) { for( int i =

POJ 3041 Asteroid (二分匹配模板-二分圖最小覆蓋)

這道題題是很經典的建模的題目,也是比較基礎的二分匹配題目。二分最小覆蓋就是說選擇儘可能少的點,然後使得每條邊至少有一個端點被選中。可以證明的是最小覆蓋數就是最大匹配數。代碼:#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int N = 510;int n, k;int g[N][N], cy[N];bool used[N];bool dfs(

POJ 2771 Guardian of Decency(最大獨立點集)

把有可能在一起的連邊,求最大獨立點集代碼:#include <cstdio>#include <cstring>#include <string>#include <iostream>#include <algorithm>using namespace std;const int N = 550;struct pupils { int h; string sex; string music; string

HDU 4185 Oil Skimming ( 二分匹配建圖 )

這道題最難的部分就是建圖,能想到怎麼建圖,就沒有問題了,直接套模板即可。建圖:將每個‘#’的格子作為一個節點,和與它相鄰的格子連線,構建一個圖,求這個圖的最大二分匹配!要注意的是,這個圖的最大二分匹配,是把所有的‘#’既做為左邊,有作為右邊,因此,匹配出來的是答案的二倍。即一個點被匹配了兩次,因為在建圖的過程中,比如(1,2)這條邊,它還有對應的(2,1)這條邊,仔細看看建圖,畫一下就懂了!代碼:#include <cstdio>#include

HDU 1907 John ( Nim Game )

就是很白的Nim博弈,沒有什麼可說的但是我交了有6次才過這道題是最後一個拿走的人是輸的人,情況和最後拿走的人贏的不同總結一下要注意的:第一就是要判斷是S態還是T態 ; 第二就是要判斷是S0狀態還是T2狀態,是的話就是必輸的代碼如下:#include <cstdio>int T, n, x, ans, s0, t2;int main(){ scanf("%d", &T); while ( T-- ) { s0 = t2 = 0;

HDU 2389 Rain on Your Parader(二分圖匹配Hopcroft-Carp)

這道題目,點數比較多,用匈牙利演算法會逾時!題目很簡答,現在發現二分匹配建圖很重要。這道題就是把人和人能在t時間內可以拿到的雨傘連起來即可,一左一右。很傻的錯誤就是在最後輸出的時候,printf函數裡面應該是表示資料群組號的地方的%d我直接寫成1,導致最後結果會變成1 2 3……所以以後寫代碼還是要注意格式,注意格式的邏輯性和保證思維的清晰度!代碼如下:#include <cstdio>#include <cstring>#include

POJ 2446 Chessboard (二分匹配)

這道題wa了三次很可惜,其實很簡單!第一次是RE,32*32=1024,好丟人!第二次是沒注意,(x,y)表示y行x列,直接按照原有經驗,搞成了x行y列!丟人!第三次是雙層for迴圈,j的那個內層迴圈只迴圈到n結束,正確的是應該到m結束!這篇總結必然好好儲存,寫代碼真的要認真!代碼:#include <cstdio>#include <cstring>#include <vector>#include <algorithm>using

HDU 3622 Bomb Game( 二分尋找+2-SAT )

題目大意:在一個平面上,放炸彈。每次給出兩個位置,在這兩個位置裡面選擇一個放炸彈。一共給出n組位置,如前面所述,每組有個兩個位置。然後,對於每個炸彈,都有一個power,即爆炸時的破壞的半徑,這個半徑是可以控制的,幾就是說,以所選的位置為圓心的半徑可以控制的圓。要求圓和圓之間不能有交集,可以相切。求解,滿足n個圓無交集的最大的半徑是多少?題目分析:首先,是這個半徑應該是多少,其實要求n個圓的半徑裡面最小的是多少,我們就可以假設這n個圓的半徑是相同的,因為相同的一組數中,最小值就是這個數。那麼半徑

POJ 3020 Antenna Placement (二分匹配)

這道題要求對二分匹配有一個比較詳細的瞭解!同時還要動一點小小的腦筋!和hdu4185是一個建圖思想,然後不一樣的是,4185裡面不要求覆蓋所有的點,但是這個題目是要求覆蓋所有的點,用少的橢圓!那麼很顯然,要求一個最大匹配,然後看有幾個點沒有匹配上的,就在最大匹配的基礎上加上幾個橢圓!還有,這道題,第一次提交RE了,是因為我把數組最大訂到了40,忘記了如果給每個點標記後,一共最多可能有400個點,這個很重要!所以要清楚你建的用來進行二分匹配的圖一共最多有多少點!感覺二分匹配是考研思維的,代碼都差不

POJ 3207 Ikki’s Story IV – Panda’s Trick(2-SAT判定)

題目:在一個圈上,數字按照順時針方向,從0-n。有m條邊,每條邊串連一對點,這每條邊可以畫在圓的外側,也可以畫在圓的內側,但是不能相交。輸入會給出點的個數N,和邊的條數M,求解知否有可能滿足所有邊不相交的條件題目分析:開始的時候,我沒有反應過來是2-SAT的題目。但是題目中有一點是很明顯的,那就是邊的位置只有兩種,一種圓內,一種圓外,那麼兩條邊如果在圓的同側(同為內側或外側)相交的話,就要一定要把他們的位置分開,即使得一條邊在內,另一條在外。這樣就是很明顯的2-SAT的題目了。那麼接下來就是資料

uva 10047

這題明顯和普通的bfs不一樣,因為普通的bfs就是vis[][]二維狀態的搜尋,走過以後的路徑是不能退回的,但是這裡應該是可以退回,所以用了個vis[x][y][dir][color]dir 在x,y格子上 表示當前的方向,color表示在x y

sicp 習題2.32

這題真的不會 參考了一下別人的:(define (subsets s) (if (null? s) (list null) (let ((rest (subsets (cdr s)))) (append rest (map (lambda(x) (cons (car s) x))

POJ 1274 The Perfect Stall(二分匹配)

水!瞬秒的題目!如有不懂,就看演算法吧!但願這次比賽有這樣水的題目,哈哈!代碼:#include <cstdio>#include <cstring>const int N = 220;int ln, rn, bmap[N][N], cy[N];bool used[N];bool dfs( int u ) { for ( int v = 1; v <= rn; ++v ) if ( bmap[u][v] && !used[v] ) {

POJ 2296 Map Labeler ( 2-SAT判定 + 二分尋找 )

這個類型的題目很典型,就是 二分+2sat題目:在一個座標繫上,有n個點,每個點貼上標籤,標籤是正方形的,粘貼的位置要使得點正好在標籤的上邊中間,或者下邊中間,標籤之間不能重合,求解,標籤的最大邊長是多少?分析:這道題和前天做的拿到反炸彈的題目很類似,都是用二分尋找找最大值,然後一個一個用2-sat判斷可行性這道題的代碼,我寫得實在太憋屈了,犯了很低級的錯誤,簡直就是一個馬虎神。最忌諱的就是知道演算法和模板,最後細節出錯!以後必須要細心!代碼如下:(鄰接鏈表)#include

POJ 3692 Kindergarten ( 最大獨立點集 )

這道題是求最大獨立點集!最大獨立點集=N - 最小頂點覆蓋=N-最大匹配。反建圖,將不認識的連上邊!代碼:#include <cstdio>#include <cstring>const int N = 220;int ln, rn, M;int bmap[N][N], cy[N];bool used[N];bool dfs( int u ) { for ( int v = 1; v <= rn; ++v ) if ( bmap[u][v]

HDOJ 1022經典火車調度問題

#include <stdio.h>#include <string.h>#include <stdlib.h>#define max 100char stack[max];int top;int empty(){ if( top == 0 ) return 1; return 0;}int main(){ char in[max], out[max]; int n, j, q[max], l, i; while(

HDU 1054 Strategic Game (最小頂點覆蓋)

剛開始想得難了,打算把二分圖建出來,把頂點分開!其實不用,直接對原圖求最大匹配,然後除以2.這裡剛開始敲模板,把下標弄錯了,題目是從0開始,我直接從1開始!還有一件事情,一定一定要記得,就是給bmap初始化!!!!很重要,至關重要的!!!代碼:#include <cstdio>#include <cstring>#include <queue>using namespace std;const int N = 1515;const int INF =

總頁數: 61357 1 .... 15181 15182 15183 15184 15185 .... 61357 Go to: 前往

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.