分類: 2013程式設計之美挑戰賽
2013-07-20 20:59
121人閱讀收藏
舉報程式設計之美挑戰賽
description
你正在參與一項輸油管道的專案,此專案的目標是架設一組輸油管道系統,使得從源頭到目的地輸送的石油流量最大。如果直接從源頭架設管道到目的地,一旦管道有損壞,將無法輸送石油。為了增強管道系統抵抗破壞的能力,你決定設定 n - 2 個中間節點,從而把管道分散開來。
源頭和目的地可以視為特殊的節點,他們的編號分別為 1 和 n,而其他的中間節點的標號為 2 到 n - 1。每條管道有特定的流量限制 c,石油可以以不超過 c 的速率在管道內流動。兩個節點之間至多由一條管道連線,也就是說這兩個節點之間單位時間內流動的石油不超過 c。
現在你們已經選定了 n 個節點,並且制定好了建設計畫。你想知道,每當一條管道建造完成,從節點 1 到節點 n 最大流量能夠增加多少。
input
輸入包括多組資料。第一行是整數 t,表示有多少組測試資料。每組測試資料的第一行包括兩個整數 n 和 m,表示節點的數量和將要建造的管道數量。接下來 m 行按建造順序描述每條管道,每行包括三個整數 i, j, c,表示要在節點 i 和 j 之間建造一條容量為 c 的管道。
1 ≤ t ≤ 100
0 ≤ m ≤ n(n - 1)/2
1 ≤ v ≠ u ≤ n
1 ≤ c ≤ 100
小資料:2 ≤ n ≤ 20
大資料:2 ≤ n ≤ 200
output
對於每組測試資料,先輸出一行「case #c:」,其中 c 為測試資料編號(從 1 開始)。緊接著按建造順序輸出使得總流量增加的管道編號和相應的增加量,以乙個空格隔開。
sample input
32 11 2 3
4 51 2 9
2 3 7
3 4 6
2 4 4
1 3 1
5 71 2 1
1 3 2
1 4 3
2 5 4
3 2 3
4 3 3
3 5 2
sample output
case #1:[cpp]view plain1 3case #2:
3 64 3
5 1case #3:
4 15 2
6 17 2
copy
print?
#include
#include
#include
#include
#include
using
namespace
std;
const
intmaxn=202;
intn,m,source,sink;
intc[maxn][maxn],vis[maxn],pre[maxn];
intek()
} if(vis[sink])
return
low;
} return
0;
} int
maxflow()
flow+=low;
} return
flow;
} int
main()
} //cout<<"maxflow is :"<
} return
0;
}
大資料貌似要超時。暫時未想到優化的方法。
2013程式設計之美挑戰賽 集會
description 在一條河的一側,分布著 n 個村莊。這些村莊平日裡需要一些 往來,然而商人們來回走遍每一座村莊是非常辛苦的,於是他們決定每個月都在河邊舉行一次集會,大家都來集會上購買需要的物品。然而在集會地點的選擇上,大家卻有分歧,因為誰都不願意集會的地點離自己村莊非常遠。經過一番激烈的討論...
2013程式設計之美全國挑戰賽
description alice和bob都要向同乙個商人購買鑽石。商人手中有 n 顆鑽石,他會將它們一顆顆地賣給他們,alice和bob通過競價的方式來決定鑽石的歸屬。具體的過程如下 商人首先指定其中乙個人開始 之後兩人輪流 要求是一定要比對方報的 更高。任何時候,如果乙個人不願出價或者出不起價錢...
2013程式設計之美全國挑戰賽
description 對於兩個長度相等的字串,我們定義其距離為對應位置不同的字元數量,同時我們認為距離越近的字串越相似。例如,0123 和 0000 的距離為 3,0123 和 0213 的距離則為 2,所以與 0000 相比,0213 和 0123 最相似。現在給定兩個字串 s1 和 s2,其中...