UVA1515 pool ,玄学的最小割
来源:互联网 发布:中国房地产市场知乎 编辑:程序博客网 时间:2024/05/17 06:33
白书题,,,,不是很理解最小割u
多刷题吧,
以后应该就会了
#include<queue>#include<cstdio>#include<vector>#include<string>#include<cstring>#include<iostream>using namespace std;typedef long long LL;const int dx[]={ 0, 0,-1, 1};const int dy[]={-1, 1, 0, 0};const int INF=0x3f3f3f3f;const int N = 9999;int n,m,a[N],b[N];struct Dinic{ struct Edge{ int from,to,cap,flow; Edge(int u,int v,int c,int f): from(u),to(v),cap(c),flow(f){} }; int n, s, t; vector<Edge>edges; vector< int>G[N]; //gragh bool vis[N]; //use when bfs int d[N],cur[N];//dist,now edge,use in dfs inline void AddEdge(int from,int to,int cap){ edges.push_back(Edge(from,to,cap,0)); edges.push_back(Edge(to,from, 0 ,0)); int top = edges.size() ; G[from].push_back(top-2); G[ to ].push_back(top-1); } inline void Init(int n){ this -> n= n ; s = 0, t = n ; edges.clear(); for (int i=0;i<=n;i++)G[i].clear(); } inline bool BFS(){ memset(vis,0,sizeof(vis)); queue<int>Q; Q.push(s);d[s]=0;vis[s]=1; while (!Q.empty()){ int x=Q.front();Q.pop(); for (int i=0;i<G[x].size();i++){ Edge &e=edges[G[x][i]]; if (vis[e.to]||e.cap<=e.flow)continue; vis[e.to]=1; d[e.to]=d[x]+1; Q.push(e.to); } } return vis[t]; } inline int DFS(const int& x,int a){ if (x==t||a==0){return a;} int flow = 0, f; for (int& i=cur[x];i<G[x].size();i++){ Edge& e=edges[G[x][i]]; if (d[x]+1!=d[e.to])continue; if ((f=DFS(e.to,min(a,e.cap-e.flow)))<=0)continue; e.flow += f; edges[G[x][i]^1].flow-=f;//ϲߍ flow+=f; a-=f; if (!a) break; } return flow; } inline int maxFlow(){return maxFlow(s,t);} inline int maxFlow(const int& s,const int& t){ int flow=0; while(BFS()){ memset(cur,0,sizeof(cur)); flow += DFS(s,INF) ; //printf("flow=%d\n",flow); } return flow; }} g ;bool pool[99][99];int id[99][99];int main(){ //freopen("in.txt","r",stdin); int T,n,m,d,f,b; scanf("%d", &T); for (char ch;T--;){ scanf("%d%d%d%d%d\n",&m,&n,&d,&f,&b); for (int i=1;i<=n;i++){ for (int j=1;j<=m;j++){ scanf("%c",&ch); pool[i][j] = ch=='#'; id[i][j] = (i-1)*m+j; } getchar() ; } int ans = 0; g.Init( n*m+1); for (int i=1;i<=n;i++){ for (int j=1;j<=m;j++){ if (i==1||i==n||j==1||j==m){ g.AddEdge(g.s,id[i][j],INF); if (!pool[i][j]) ans += f ; }else{//not at the bounder if(pool[i][j])g.AddEdge(g.s,id[i][j],d); else g.AddEdge(id[i][j],g.t,f); } for (int k=0;k<4;k++){ int cx = i + dx[k]; int cy = j + dy[k]; if (cx<1||cx>n||cy<1||cy>m)continue; g.AddEdge(id[i][j],id[cx][cy],b); } } } printf("%d\n", ans + g.maxFlow()); } return 0;}
0 0
- UVA1515 pool ,玄学的最小割
- [最小割最大流]UVa1515 - Pool construction
- 最小割 UVA 1515 Pool construction
- UVA 1515 Pool construction [最小割]
- UVA 1515 Pool construction(最小割)
- uva 1515 Pool construction(最小割)
- uva1515
- 1515 - Pool construction(最大流最小割模型)
- 求割边最小的最小割
- 最小割的方案
- [luogu]P2085最小函数值-堆排的玄学运用
- 最小花费(玄学RE)
- 求网络的最小割
- 最小割的一点理解
- 最小割的一些理解
- 最小割的一点理解
- [CQOI2016]不同的最小割
- 【分治最小割】[CQOI2016]不同的最小割
- 01初识nodejs中httpServer
- 略谈近几年无痛呻吟的国产青春片
- Swoole的进程模型
- [操作系统]内存管理
- windows下 composer的错误
- UVA1515 pool ,玄学的最小割
- 使用WKWebView替换UIWebView
- chrome扩展——bilibili视频封面获取器
- seo 对于一个网站来说很重要 简单解释一下
- HDU5920【模拟】
- leetcode submission/20161004(Valid Perfect Square)
- 编程环境
- HDU 5919 Sequence II(主席树)
- 让website支持C# 6.0