好题,详细题解在这里http://blog.csdn.net/weiguang_123/article/details/8077385

这里回顾一下:

当i和j都在一个集合里会产生新的收益,是经典题直接建

当i和j不在同一个集合产生新的收益,需要点是二分图XY并把X或Y点集s-t反建

这里是类似的(以前的总结:http://www.cnblogs.com/phile/p/4473226.html)

 #include<bits/stdc++.h>

 using namespace std;
typedef long long ll;
const int inf=1e9+;
struct way{int po,flow,next;} e[];
int t,n,p[],pre[],numh[],cur[],h[],d[],m,len; void add(int x,int y,int f)
{
e[++len].po=y;
e[len].flow=f;
e[len].next=p[x];
p[x]=len;
}
void build(int x, int y, int f)
{
add(x,y,f);
add(y,x,);
}
ll sap()
{
memset(numh,,sizeof(numh));
memset(h,,sizeof(h));
numh[]=t+;
for (int i=; i<=t; i++) cur[i]=p[i];
int j,u=,neck=inf; ll s=;
while (h[]<t+)
{
d[u]=neck;
bool ch=;
for (int i=cur[u]; i!=-; i=e[i].next)
{
j=e[i].po;
if (e[i].flow>&&h[u]==h[j]+)
{
neck=min(neck,e[i].flow);
cur[u]=i;
pre[j]=u; u=j;
if (u==t)
{
s+=neck;
while (u)
{
u=pre[u];
j=cur[u];
e[j].flow-=neck;
e[j^].flow+=neck;
}
neck=inf;
}
ch=;
break;
}
}
if (ch)
{
if (--numh[h[u]]==) return s;
int q=-,tmp=t;
for (int i=p[u]; i!=-; i=e[i].next)
{
j=e[i].po;
if (e[i].flow&&h[j]<tmp)
{
tmp=h[j];
q=i;
}
}
cur[u]=q; h[u]=tmp+;
numh[h[u]]++;
if (u)
{
u=pre[u];
neck=d[u];
}
}
}
return s;
} int main()
{
int cas;
scanf("%d",&cas);
while (cas--)
{
len=-;
memset(p,,sizeof(p));
scanf("%d",&n);
ll ans=;
for (int i=; i<=n; i++)
{
int s=;
for (int j=; j<=n; j++)
{
int x;
scanf("%d",&x);
s+=x; ans+=x;
build(i,j,x);
}
build(,i,s);
}
t=n+;
for (int i=; i<=n; i++)
{
int x;
scanf("%d",&x);
build(i,t,x);
}
printf("%lld\n",ans-sap());
}
}

hdu4307的更多相关文章

  1. HDU4307 Matrix(最小割)

    题目 Source http://acm.hdu.edu.cn/showproblem.php?pid=4307 Description Let A be a 1*N matrix, and each ...

  2. 【HDU4307】Matrix

    本篇博客基本全篇转自https://www.cnblogs.com/staginner/archive/2012/08/13/2636826.html,太强啦ORZ 题意 A是个1*n的矩阵,每个元素 ...

随机推荐

  1. PID控制算法的C语言实现三 位置型PID的C语言实现

    上一节中已经抽象出了位置性PID和增量型PID的数学表达式,这一节,重点讲解C语言代码的实现过程,算法的C语言实现过程具有一般性,通过PID算法的C语言实现,可以以此类推,设计其它算法的C语言实现. ...

  2. Codeforces Round #417 (Div. 2)A B C E 模拟 枚举 二分 阶梯博弈

    A. Sagheer and Crossroads time limit per test 1 second memory limit per test 256 megabytes input sta ...

  3. Linux系统之路——用CentOS 7打造合适的科研环境

    安装CentOS CentOS 7的安装与其他Linux发行版的安装差不多,个别地方稍有不同. 准备工作 准备材料 U盘:容量700M以上,用于制作U盘启动盘,因为在制作启动盘时会格式化U盘,所以U盘 ...

  4. 转--snmp如何被tr069替代

    Form:本期话题:技术点详解---新型网管理念TR-069 一. 带内网管与带外网管 网络设备是一种资产,资产往往都需要进行管理,网络设备也不例外,网络设备的作用是网络互联,网络应用是一种实时交互性 ...

  5. bash shell输出颜色

    http://note.youdao.com/noteshare?id=9de6d5fac6380447df112dff5bc404a1

  6. 6.UiWatcher API 详细介绍

    Tip: 1.监听器不是完能的,所以若用例需要设置监听器防止用例被打断,最好把延迟时间调高一点 2.UiDevice是不会触发监听功能的 3.监听器在方法体或者循环体中是程序还是会被打断的 4.监听器 ...

  7. crontab 自动执行脚本

    crontab -e ================>自动执行某脚本!!!!!!! 1001 ls 1002 cd /home/wwwroot/default/ 1003 ls 1004 cr ...

  8. UVA 11982 Fantasy Cricket

    https://vjudge.net/problem/UVA-11982 题意: 给出一个包含’U’, ‘D’, ‘E’的字符串, ’U’ 表示需要把这个字符向后移动, ’D’表示需要把这个字符向前移 ...

  9. Python进行数据分析(一)初步学习 对时区进行计数

    time_zones[:10] Out[19]: [u'America/New_York', u'America/Denver', u'America/New_York', u'America/Sao ...

  10. linux的MySQL设为开机启动

    linux开启启动的程序一般放在/etc/rc.d/init.d/里面,/etc/init.d/是其软连接 mysql设为linux服务cp /usr/local/mysql5/share/mysql ...