好题,详细题解在这里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. java8系列

    参见地址:https://segmentfault.com/a/1190000012211339

  2. Python之数据库导入(py3.5)

    数据库版本:MySQL Python版本:3.5 之前用想用MySQLdb来着,后来发现py3.5版本不支持,现选择pymysql 现在想将数据库adidas中的表jd_comment读取至pytho ...

  3. 出现错误日志:The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path

      tomcat6出现错误日志: 信息: The APR based Apache Tomcat Native library which allows optimal performance in  ...

  4. (转)linux下vi命令修改文件及保存的使用方法

    进入vi的命令         vi filename :打开或新建文件,并将光标置于第一行首    vi n filename :打开文件,并将光标置于第n行首    vi filename :打开 ...

  5. OpenCV---Numpy数组的使用以及创建图片

    一:对头像的所有像素进行访问,并UI图像进行像素取反 (一)for循环取反 import cv2 as cv import numpy as np def access_pixels(image): ...

  6. css纯数字或字母换行

    #div { word-wrap:break-word; word-break:break-all; }

  7. JAVA多线程提高五:原子性操作类的应用

    当程序更新一个变量时,如果多线程同时更新这个变量,可能得到期望之外的值,比如变量i=1,A线程更新i+1,B线程也更新i+1,经过两个线程操作之后可能i不等于3,而是等于2.因为A和B线程在更新变量i ...

  8. cmd下常用命令汇总

    1.获得文件夹内所有文件的文件名列表 dir *.png /b>list.txt 其中: (1)*.png表示筛选后缀为.png的文件 (2)/b为输出的模式.如下: 引用 /b 只有文件名  ...

  9. Zepto学习笔记

    Zepto和jQuery的很多API都很一致,思路也很相似,我不会全都整理出来,只是把一些平时用到了的或者不同的地方需要注意一下的地方总结出来.另外,Zepto现在还不是很成熟,无论是对大小写的敏感还 ...

  10. 【洛谷P1597】语句解析

    题目背景 木有背景…… 题目描述 一串(<255)PASCAL语言,只有a,b,c 3个变量,而且只有赋值语句,赋值只能是一个一位的数字或一个变量,未赋值的变量值为0.输出a,b,c 最终的值. ...