分析:
首先假設答案為t。
構圖如下:
把原圖的每個點u拆成t+1個,分別為u0,u1,......, 其中u0是初始狀態的結點u,ui表示經過i天之後的結點u。對於原圖中的相鄰結點a和b,在新圖中新增一條從ai到bi+1的邊,容量為1,再新增一條bi到ai+1的邊,容量也為1。對於原圖中的每個結點u,新增
ui->ui+1,容量為無窮大,表示飛船可以原地不動。在此圖中求最大流,判斷流量是否至少為k即可。
逐步增大天數t,每次不要重新求最大流,直接加上一層結點,在上次求出的最大流基礎上繼續增廣,直到流量達到k。
注意,同一時刻ai->bi+1和bi->ai+1不能同時有流量。
**如下:
#include #include #include #include #include using namespace std;
const int inf = 1e9;
const int maxn = 5000+10;
const int maxm = 200+10;
struct edge;
bool operator < (const edge &a,const edge &b)
void init()}}
return vis[t];
}inline int min(int x, int y)
}return flow;
}int maxflow(int s, int t, int limit)
return flow;
}int day,flow;
void print(){
printf("%d\n",day);
int idx = 0;
vectorlocation(k,s);
for (int d=1; d<=day; d++){
idx += n*2;
vectormoved(k,0);
vectora,b;
for (int i=0; i
LA 4597 網路流 有上下界
include include include include define pb push back define mp make pair define f1 first define f2 second using namespace std const int maxn 110,inf 0x...
2021 網路流初步
首先是一些概念,容量,流量,飽和弧,非飽和弧,零弧,非零弧,增廣路,殘量,殘量網路 這個方法的時間複雜度比較差 為 一直bfs找增廣路,直到找不到演算法結束,每次找到後,修改正向邊和反向邊的邊權即可 includeusing namespace std int n,m,s,t const int i...
2007LA 3902 網路 樹 貪心
題意 在乙個樹狀的網路中,提供vod服務,葉子節點是客戶端,其他是伺服器,要減少網路延遲,所以要在其他的伺服器也安裝同樣的服務,使得每台客戶端到最近伺服器的距離不超過k,求最少安裝服務的伺服器。思路 乙個關鍵點是選擇u節點的k級祖先是最優的,因為覆蓋的範圍最廣,所以我們構造出一顆有根樹,從下往上遍歷...