微軟程式設計 管道系統

2021-06-16 20:38:35 字數 2710 閱讀 4792

分類: 2013程式設計之美挑戰賽

2013-07-20 20:59

112人閱讀收藏

舉報 程式設計之美挑戰賽

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

3

2 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:

1 3case #2:

3 64 3

5 1case #3:

4 15 2

6 17 2

[cpp]view plain

copy

print?

#include

#include

#include

#include

#include

using

namespace std;

const

int maxn=202;

int n,m,source,sink;

int c[maxn][maxn],vis[maxn],pre[maxn];

int ek() }

if(vis[sink])return low;

} return 0;

} int maxflow()

flow+=low;

} return flow;

} int main() }

//cout<<"maxflow is :"<}

return 0; }

#include #include #include #include #include using namespace std;

const int maxn=202;

int n,m,source,sink;

int c[maxn][maxn],vis[maxn],pre[maxn];

int ek()

{ memset(vis,0,sizeof(vis));

int low=(1<<30);

queueq;

q.push(source);

vis[source]=1;

pre[source]=-1;

while( !q.empty())

{ int u=q.front();

q.pop();

for(int i=1;i<=n;i++)

{ if(!vis[i]&&c[u][i]>0){

vis[i]=1;

pre[i]=u;

low=(low>t;

//fin>>t;

scanf ("%d",&t);

while(t--)

{ //cin>>n>>m;

//fin>>n>>m;

scanf ( "%d%d", &n, &m );

memset(c,0,sizeof(c));

int mflow=0;

cout<<"case #"<>x>>y>>z;

//fin>>x>>y>>z;

scanf ( "%d%d%d", &x, &y, &z );

c[x][y]+=z;

c[y][x]+=z;

source=1;

sink=n;

int curflow;

if(source==sink)

curflow=0;

else curflow=maxflow();

if(curflow>0){

cout<

有名管道管道程式設計

linux程序和程序之間有多種通訊方式。linux程序間通訊的主要方式有 1 無名管道 2 有名管道 3 訊號 4 訊息佇列 5 共享記憶體 6 訊號量 7 套接字 管道操作是比較簡單的通訊方式,乙個程序往管道中寫入資料,另乙個程序從管道中讀出資料。管道包括無名管道和有名管道。前者只能用於父程序和子...

Linux系統程式設計 管道和FIFO

ls wc l 為執行上述命令,shell建立了兩個程序來分別執行ls和wc。通過管道連線兩個程序。管道是單向的,允許資料從乙個程序流向另乙個程序。管道是乙個位元組流意味著在使用管道時不存在訊息或訊息邊界。從管道中讀取資料的程序可以讀取任意大小的資料塊,而不管寫入程序寫入管道的資料塊大小。通過管道的...

Linux系統程式設計之管道通訊

toc 侷限性 資料自己讀不能自己寫。資料一旦被讀走,便不在管道中存在,不可反覆讀取。由於管道採用半雙工通訊方式。因此,資料只能在乙個方向上流動。只能在有公共祖先的程序間使用管道。pipe的demo include include include include include include in...