好题,详细题解在这里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. golang设置代理

    http://note.youdao.com/noteshare?id=a8df0ec2d623f282a782dbe937bdae9f

  2. Codeforces 864E dp

    题意: 房间着火了,里面有n件物品,每件物品有营救需要的时间t,被烧坏的最晚时间d,他的价值p,问能得到的最大价值,并且输出营救出来的物品编号 代码: //必然是先救存活时间短的即d小的,所以先排个序 ...

  3. OpenCV---边缘保留滤波EPF

    OpenCV经典的两种实现EPF方法:高斯双边和均值迁移 一:双边模糊 差异越大,越会完整保留 def bi_demo(image): dst = cv.bilateralFilter(image,0 ...

  4. 根据wsdl的url,使用axis1.4生成客户端,并且对webservice进行调用(转)

    根据wsdl的url,使用axis1.4生成客户端,并且对webservice进行调用 axis1.4下载地址 1.到www.apache.org上去下载axis-bin-1_4.zip,如要关联源代 ...

  5. 垂直居中vertical-align

    vertical-align对一些特定显示样式(例如单元格显示方式:table-cell)的元素才会起作用. div{display:table-cell; vertical-align:middle ...

  6. 【CODEVS】1022 覆盖

    [算法]二分图匹配(最大流) [题解]对i+j进行奇偶染色,就可以保证相邻两格异色. 然后就是二分图了,对相邻格子连边跑最大流即可. #include<cstdio> #include&l ...

  7. c语言学习笔记.关键字.存储类型关键字等

    关键字const 1.修饰变量. 修饰的对象为常量,只读. 2.修饰指针. const 也可以和指针变量一起使用,这样可以限制指针变量本身,也可以限制指针指向的数据. const 离变量名近就是用来修 ...

  8. Vue.js 在 webpack 脚手架中使用 cssnext

    Vue.js 的 webpack脚手架默认已经使用了 PostCSS 的 autoprefixer 的功能. 如果想使用下一代 css语法,即cssnext: 1. 安装依赖 npm install ...

  9. 64_t5

    texlive-mkpattern-svn15878.1.2-33.fc26.2.noarch..> 24-May-2017 15:54 38178 texlive-mkpic-bin-svn3 ...

  10. NOIP模拟赛 城市

    题目描述 $ZZQ$ 是一国之主. 这个国家有$N$个城市, 第$i$个城市与第$(i + 1) (mod N)$和$(i - 1) (mod N)$在一个正$N$边形相连. $ZZQ$ 又新建了$N ...