BZOJ2132 圈地计划
生活随笔
收集整理的這篇文章主要介紹了
BZOJ2132 圈地计划
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
傳送~
來自y_immortal學長的網絡流推薦2333
建模比較神仙qwq
首先可以建立最小割模型 ->二選一
就是我們處理不同的貢獻不好處理 那么我們考慮怎么把它變成相同的貢獻
對于原圖我們進行黑白染色 然后如果一個點屬于T集我們讓它反色就可以做到相同的有貢獻
那么很明顯這個貢獻是雙向的 對于兩個點之間的貢獻是相加的
所以我們這樣做最小割就可以辣~
代碼。
//Love and Freedom. #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> #include<queue> #define inf 20021225 #define ll long long #define M 200000 #define N 30000 using namespace std;struct edge{int to,lt,f;}e[M]; int in[N],cnt=1,dep[N]; int s,t; void add(int x,int y,int f) {e[++cnt].to = y; e[cnt].lt = in[x]; e[cnt].f = f; in[x] = cnt;e[++cnt].to = x; e[cnt].lt = in[y]; e[cnt].f = 0; in[y] = cnt; } queue<int> q; bool bfs() {while(!q.empty()) q.pop();memset(dep,0,sizeof(dep));dep[s] = 1; q.push(s);while(!q.empty()){int x = q.front(); q.pop();for(int i=in[x];i;i=e[i].lt){int y = e[i].to;if(!dep[y] && e[i].f){dep[y] = dep[x]+1; q.push(y);if(dep[t]) return true;}}}return false; }int dfs(int x,int f) {if(x==t||!f) return f;int cur = f;for(int i=in[x];i;i=e[i].lt){int y = e[i].to;if(dep[y] == dep[x]+1 && e[i].f){int flow = dfs(y,min(cur,e[i].f));e[i].f -= flow; e[i^1].f += flow;cur -= flow; if(cur==0) return f;}}dep[x] = -1;return f-cur; }int dinic() {int ans = 0;while(bfs()) ans+=dfs(s,inf);return ans; } int n,m; int id(int x,int y) {return (x-1)*m + y; } int a[101][101]; int b[101][101]; int c[101][101]; int xx[4] = {0,0,1,-1}; int yy[4] = {1,-1,0,0}; int main() {int fin = 0;scanf("%d%d",&n,&m);s = n*m*2; t = s+1;for(int i=1;i<=n;i++)for(int j=1;j<=m;j++){scanf("%d",&a[i][j]);if((i+j)&1) add(s,id(i,j),a[i][j]);else add(id(i,j),t,a[i][j]);fin+=a[i][j];}for(int i=1;i<=n;i++)for(int j=1;j<=m;j++){scanf("%d",&b[i][j]);if((i+j)&1) add(id(i,j),t,b[i][j]);else add(s,id(i,j),b[i][j]);fin+=b[i][j];}for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)scanf("%d",&c[i][j]);for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)for(int k=0;k<4;k++){int x = i+xx[k], y = j+yy[k];if(x<1||y<1||x>n||y>m) continue;int val = c[i][j] + c[x][y];add(id(i,j),id(x,y),val);fin+=c[i][j];}printf("%d\n",fin-dinic());return 0; }?
轉載于:https://www.cnblogs.com/hanyuweining/p/10321871.html
總結
以上是生活随笔為你收集整理的BZOJ2132 圈地计划的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 从 for of 聊到 Generato
- 下一篇: 自己写的一个抢票加速的Python小程序