題目大意:有一些點和一些邊,每條邊有乙個監視代價。乙個人從1號點出發,到達某些「傳送點」可以逃生。但被監視的邊就不能走了。要你用最小的監視代價使得那個人無法傳送。
解題思路:求最小割。先建乙個超級匯點$n+1$,把所有傳送點連上這個超級匯點,然後根據「最小割=最大流」的定理,跑最大流即可。注意無向圖。
以下為dinic演算法**。
c++ code:
#include#include#include#include#includeusing namespace std;#define inf 0x3f3f3f3f
struct edges
};vectorg[105];
int n,m,level[105],iter[105];
queueq;
inline void addedge(int from,int to,int cap)
void bfs(int s)
} }}int dfs(int u,int t,int f)
} }return 0;
}int max_flow(int s,int t)
return flow;
}int main()
int p;
++n;
scanf("%d",&p);
while(p--)
printf("%d\n",max_flow(1,n));
return 0;
}
152 城市遊戲 AcWing
原題鏈結 求最大矩形面積我們可以聯想到那道經典的單調棧例題,因為這道題的n m都不是很大,所以我們可以用o n 2 的演算法。列舉每一行,將每一行以及上面的矩形都看成直方圖,即把每列f的個數當作那道題的陰影部分的高度,然後我們在每一行求它的左右最遠距離,那麼這道題就和那道經典題沒有任何區別 1 in...
演算法導論 15 2 整齊列印
看了這個人寫的解題思路狀態轉移方程,這裡只是用 實現了下 問題 考慮在乙個印表機上整齊地列印一段文章的問題。輸入的正文是n個長度分別為l1 l2 ln 以字元個數度量 的單詞構成的序列。我們希望將這個段落在一些行上整齊地列印出來,每行至多m個字元。整齊度 的標準如下 如果某一行包含從i到j的單詞 i...
152 乘積最大子串行
給定乙個整數陣列 nums 找出乙個序列中乘積最大的連續子串行 該序列至少包含乙個數 示例 1 輸入 2,3,2,4 輸出 6 解釋 子陣列 2,3 有最大乘積 6。示例 2 輸入 2,0,1 輸出 0 解釋 結果不能為 2,因為 2,1 不是子陣列。記錄每一處為止的列表乘積最大最小值,後一處乘積的...