LA11248 訓練指南 網路擴容 最大流

2022-05-27 14:15:12 字數 1513 閱讀 5652

題意:

給定乙個有向網路,每條邊均有乙個容量。問是否存在乙個從點1到點n,流量為c的流。如果不存在,是否可以恰好修改一條弧的容量,使得存在這樣的流?

分析:先跑一遍最大流,如果最大流大於等於c,則輸possible。如果最大流小於c,則表明需要修改邊的流量。很顯然,需要修改的弧一定是滿流的弧。但是如果直接暴力會超時,所以我們可以有兩個優化。

1.第一次求完最大流以後,把每條弧的流量儲存下來,每次修改完一條弧的容量以後,都從當前殘量網路開始繼續增廣。

2.每次不需要增廣到最大流,當流量大於等於c的時候就停止增廣(不過不加這個優化好像也沒事,反正我沒加··)

1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7

8using

namespace

std;

9const

int maxn=100+10;10

const

int maxm=20000+10;11

const

int inf=2147000000;12

struct

dinic

22void add_edge(int a,int b,int

c)30

bool

bfs()45}

46}47return

vis[t];48}

49int dfs(int x,int

a)61}62

return

flow;63}

64int maxflow(int s,int

t)71

return

flow;72}

73}dinic;

74struct

edge

79};

80 vectorans;

81int

kase,n,e,c;

82int

main()

94int maxflow=dinic.maxflow(1

,n);

95if(maxflow>=c)else

102int cap,c=c-maxflow;

103for(int i=0;i<=dinic.sz;i+=2

));113

}114 dinic.cap[i]=cap;

115 dinic.cap[i^1]=cap;

116for(int i=0;i<=dinic.sz;i++)dinic.flow[i]=flow[i];

117}

118}

119if(ans.size()==0

)else

128 printf("\n"

);129

}130

}131

}132

return0;

133 }

view code

UVA11248 網路擴容(列舉割邊擴充)

題意 給你乙個有向圖,問你從1到n的最大流是多少?如果流量大於等於c那麼直接輸出乙個串,否則輸出只擴充一條邊的流量就可以達到1 n大於等於c的所有邊,如果擴充不了就 輸出另乙個串。sample input 4 4 5 1 2 5 1 3 5 2 4 5 3 4 5 4 4 5 1 2 1 1 3 5...

LA2531 訓練指南 足球聯賽 最大流

題意 有n支隊伍進行比賽,每支隊伍需要打的比賽數目相同。每場比賽恰好一支隊伍勝,另一支敗。給出每支隊伍目前勝的場數和敗的場數,以及每兩支隊伍還剩下的比賽場數,確定所有可能的冠軍的球隊。獲勝場數最多的是冠軍,可以並列 分析乙隻隊伍如果可能得冠軍,那麼就一定可以通過調整,未來的幾場比賽的結果使自己贏得場...

LA3211 訓練指南 飛機排程 2 sat

題意 有n嫁飛機需要著陸。每架飛機都可以選擇 早著陸 和 晚著陸 兩種方式之一,且必須選擇一種。第i架飛機的早著陸時間為ei,晚著陸時間為li,不得在其他時間著陸。你的任務是為這些飛機安排著陸方式,使得整個著陸計畫盡量安全。話句話說,如果把所有飛機的實際著陸時間按照從早到晚的順序排列,相鄰兩個著陸時...