http://poj.org/problem?id=3422

 #include <stdio.h>
#include <algorithm>
#include <string.h>
#include <queue>
using namespace std;
const int INF = <<;
const int N=;
int Map[][],dis[N];
int head[N],pre[N];
bool vis[N];
int cnt = ;
int ans = ;
int n;
struct node
{
int u,v,c,f;
int next; } edge[N];
void add(int u,int v,int c,int f)
{
edge[cnt].u = u;
edge[cnt].v = v;
edge[cnt].c = c;
edge[cnt].f = f;
edge[cnt].next = head[u];
head[u] = cnt++;
edge[cnt].u = v;
edge[cnt].v = u;
edge[cnt].c = -c;
edge[cnt].f = ;
edge[cnt].next = head[v];
head[v] = cnt++;
}
int spfa()
{
for (int i = ; i <= n*n*+; i++)
{
dis[i] = INF;
pre[i] = -;
vis[i] = false;
}
dis[n*n*] = ;
queue<int>q;
q.push(n*n*);
vis[n*n*] = true;
while(!q.empty())
{
int u = q.front();
vis[u] = false;
q.pop();
for (int j = head[u]; j!=-; j=edge[j].next)
{
if (edge[j].f > &&dis[edge[j].v] > dis[u]+ edge[j].c)
{
pre[edge[j].v] = j;
dis[edge[j].v] = dis[u]+ edge[j].c;
if (!vis[edge[j].v])
{
q.push(edge[j].v);
vis[edge[j].v] = true;
}
}
}
}
if (pre[n*n*+]==-)
return ;
return ;
}
void MCMF()
{
while(spfa())
{
int Minflow = INF;
int j = pre[n*n*+];
while(j!=-)
{
Minflow = min(Minflow,edge[j].f);
j = pre[edge[j].u];
}
j = pre[n*n*+];
while(j!=-)
{
edge[j].f-=Minflow;
edge[j^].f+=Minflow;
ans+=Minflow*edge[j].c;
j = pre[edge[j].u];
}
}
}
int main()
{
int k;
scanf("%d%d",&n,&k);
memset(Map,,sizeof(Map));
memset(head,-,sizeof(head));
for (int i = ; i <= n; i++)
{
for (int j = ; j <= n; j++)
{
scanf("%d",&Map[i][j]);
}
}
for (int i = ; i <= n; i++)//拆点
{
for (int j = ; j <= n; j++)
{
int u = (i-)*n+j-;
add(*u,*u+,-Map[i][j],);//加边
add(*u,*u+,,k-);
}
}
for (int i = ; i <= n; i++)//向右加边
{
for (int j = ; j < n; j++)
{
int u = (i-)*n+j-;
add(*u+,(u+)*,,k);
}
}
for (int i = ; i < n; i++)//向下加边
{
for (int j = ; j <= n; j++)
{
int u = (i-)*n+j-;
add(*u+,(u+n)*,,k);
}
}
add(n*n*,,,k);//加源点
add(n*n*-,n*n*+,,k);//加终点
MCMF();
printf("%d\n",-ans);
return ;
}

最新文章

  1. Ubuntu更改鼠标灵敏度
  2. RuntimeWarning: invalid value encountered in divide
  3. C语言register关键字—最快的关键字 ---------------转自http://blog.sina.com.cn/s/blog_6a1837e90101128k.html
  4. 另辟思路解决 Android 4.0.4 不能监听Home键的问题
  5. [mock]12月28日
  6. hdu 5062
  7. mycat(4)
  8. Java语言国际化
  9. HashMap面试题:90%的人回答不上来
  10. 如何在嵌入式Linux上开发一个语音通信解决方案
  11. PHP超全局变量$_SERVER分析
  12. [INet] I/O模型:同步阻塞,同步非阻塞,异步非阻塞
  13. Hdoj 2050.折线分割平面 题解
  14. 040 关于hive元数据的解析
  15. C++11智能指针 share_ptr,unique_ptr,weak_ptr用法
  16. SAP字段带空格,导致日期转换失败,提示not a vaild month
  17. js 闭包 弊端
  18. 使用mysql workbench和vscode进行数据库差异比对
  19. 【C++】static小结
  20. 042——VUE中组件之子组件使用$on与$emit事件触发父组件实现购物车功能

热门文章

  1. 字符串--P1308 统计单词数
  2. set解两数之和--P2141 珠心算测验
  3. 洛谷—— P1450 [HAOI2008]硬币购物
  4. Linux 安装 Tomcat 详解
  5. java 十三周总结
  6. ubuntu_linux自动补全出现问题
  7. 2018百度之星资格赛T2 子串查询
  8. Spring MVC--第一个程序
  9. Java基础学习总结(77)——Java枚举再总结
  10. java多线程编程核心技术(一)--多线程技能