1. 程式人生 > >BZOJ4886: [Lydsy1705月賽]疊塔遊戲(4886: [Lydsy1705月賽]疊塔遊戲)

BZOJ4886: [Lydsy1705月賽]疊塔遊戲(4886: [Lydsy1705月賽]疊塔遊戲)

4886: [Lydsy1705月賽]疊塔遊戲

Time Limit: 20 Sec  Memory Limit: 256 MB
Submit: 198  Solved: 76
[Submit][Status][Discuss]

Description

小Q正在玩一個疊塔的遊戲,遊戲的目標是疊出儘可能高的塔。在遊戲中,一共有n張矩形卡片,其中第i張卡片的 長度為a_i,寬度為b_i。小Q需要把所有卡片按一定順序疊成一座塔,要求對於任意一個矩形,它的長度要嚴格大 於它上邊的任意一個矩形的長度。塔的高度為所有矩形的寬度之和。在遊戲中,小Q可以將卡片翻轉90度來使用, 而且必須用上全部n張卡片。請寫一個程式,幫助計算小Q能疊出最高的塔的高度。

Input

第一行包含一個正整數n(1<=n<=250000),即卡片的個數。 接下來n行,每行兩個正整數a_i,b_i(1<=a_i,b_i<=10^9),分別表示每張卡片的長度和寬度。

Output

輸出一行一個整數,即最高的塔的高度,輸入資料保證一定存在解。

Sample Input

3
5 16
10 5
5 10

Sample Output

20

HINT

Source

本OJ付費獲得

 

思路:要求長度遞增,求最大寬度之和。 由於排序是自己定的,所以只要求長度不相同,求最大寬度之和。 這樣的話,我們就嘗試用最大費用流來建圖,

S向每個矩形連(1,0)(表示容量為1,費用為0)的邊;     每個矩形向x連(1,y)的邊,向y連(1,x)的邊;     然後每個數向T連(1,0)的邊。然後就是跑最大費用流。 由於資料太大,顯然會超時。  這樣的題一般可以貪心優化,可以對比bzoj4883,是一個套路。