[TJOI2015]线性代数(最大权闭合子图,网络流)

为了提高智商,ZJY开始学习线性代数。她的小伙伴菠萝给她出了这样一个问题:给定一个n*n的矩阵B和一个1×n的矩阵C。求出一个1×n的01矩阵A。使得\(D=(A×B−C)×A^T\)最大,其中 \(A^T\) 为A的转置。输出D。

这相当于:若同时选择X和Y,获得\(B[x][y]\)收益,若选择了X,需要\(C[x]\)的代价。然后,仿效前面那道题的做法,这道题目就是一个最大闭合权子图(满足用割选择一些点,并且有些点必选的条件)。

  1. #include <cstdio>
  2. #include <cstring>
  3. using namespace std;
  4. const int maxn=3e5+5, maxm=1e6+5, INF=1e9;
  5. int n, m, src, dst, ans;
  6. inline int min(int x, int y){ return x<y?x:y; }
  7. struct Edge{
  8. int to, nxt, f;
  9. }e[maxm*2];
  10. int fir[maxn], cnte=1;
  11. void addedge(int x, int y, int v){
  12. Edge &ed=e[++cnte];
  13. ed.to=y; ed.nxt=fir[x]; ed.f=v; fir[x]=cnte;
  14. }
  15. int q[maxn], head, tail, dep[maxn];
  16. bool bfs(){
  17. memset(dep, 0, sizeof(dep)); dep[src]=1;
  18. head=tail=0; q[tail++]=src; int u;
  19. while (head<tail){
  20. u=q[head++];
  21. for (int i=fir[u]; ~i; i=e[i].nxt)
  22. if (e[i].f&&!dep[e[i].to]){
  23. dep[e[i].to]=dep[u]+1;
  24. q[tail++]=e[i].to;
  25. }
  26. }
  27. return dep[dst];
  28. }
  29. int cur[maxn];
  30. int dfs(int u, int flow){
  31. if (u==dst) return flow;
  32. for (int i=cur[u]; ~i; i=e[i].nxt, cur[u]=i)
  33. if (dep[e[i].to]==dep[u]+1&&e[i].f){
  34. int minm=dfs(e[i].to, min(flow, e[i].f));
  35. e[i].f-=minm; e[i^1].f+=minm;
  36. if (minm) return minm;
  37. }
  38. return 0;
  39. }
  40. int Dinic(){
  41. int ans=0, t;
  42. while (bfs()){
  43. memcpy(cur, fir, sizeof(fir));
  44. while (t=dfs(src, INF)) ans+=t;
  45. }
  46. return ans;
  47. }
  48. int main(){
  49. memset(fir, -1, sizeof(fir));
  50. scanf("%d", &n); int t;
  51. src=0; dst=n*(n+1)+1;
  52. for (int i=1; i<=n; ++i)
  53. for (int j=1; j<=n; ++j){
  54. scanf("%d", &t); ans+=t;
  55. addedge(src, i*n+j, t); addedge(i*n+j, src, 0);
  56. addedge(i*n+j, i, INF); addedge(i, i*n+j, 0);
  57. addedge(i*n+j, j, INF); addedge(j, i*n+j, 0);
  58. }
  59. for (int i=1; i<=n; ++i){
  60. scanf("%d", &t);
  61. addedge(i, dst, t); addedge(dst, i, 0);
  62. }
  63. ans-=Dinic();
  64. printf("%d\n", ans);
  65. return 0;
  66. }

[TJOI2015]线性代数(网络流)的更多相关文章

  1. [TJOI2015]线性代数 网络流

    题面 题面 题解 先化一波式子: \[D = (A \cdot B - C)A^T \] \[ = \sum_{i = 1}^{n}H_{1i}\cdot A^T_{i1}\] \[H_{1i} = ...

  2. 【BZOJ 3996】 3996: [TJOI2015]线性代数 (最小割)

    3996: [TJOI2015]线性代数 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1368  Solved: 832 Description 给 ...

  3. bzoj 3996: [TJOI2015]线性代数 [最小割]

    3996: [TJOI2015]线性代数 题意:给出一个NN的矩阵B和一个1N的矩阵C.求出一个1*N的01矩阵A.使得 \(D=(A * B-C)* A^T\)最大.其中A^T为A的转置.输出D.每 ...

  4. BZOJ_3996_[TJOI2015]线性代数_最大权闭合子图

    BZOJ_3996_[TJOI2015]线性代数_最大权闭合子图 Description 给出一个N*N的矩阵B和一个1*N的矩阵C.求出一个1*N的01矩阵A.使得 D=(A*B-C)*A^T最大. ...

  5. 【BZOJ3996】[TJOI2015]线性代数(最小割)

    [BZOJ3996][TJOI2015]线性代数(最小割) 题面 BZOJ 洛谷 题解 首先把式子拆开,发现我们的答案式就是这个: \[\sum_{i=1}^n\sum_{j=1}^n B_{i,j} ...

  6. 【LG3973】[TJOI2015]线性代数

    [LG3973][TJOI2015]线性代数 题面 洛谷 题解 正常解法 一大堆矩阵乘在一起很丑对吧 化一下柿子: \[ D=(A*B-C)*A^T\\ \Leftrightarrow D=\sum_ ...

  7. [Luogu 3973] TJOI2015 线性代数

    [Luogu 3973] TJOI2015 线性代数 这竟然是一道最小割模型. 据说是最大权闭合子图. 先把矩阵式子推出来. 然后,套路建模就好. #include <algorithm> ...

  8. 【BZOJ3996】[TJOI2015]线性代数 最大权闭合图

    [BZOJ3996][TJOI2015]线性代数 Description 给出一个N*N的矩阵B和一个1*N的矩阵C.求出一个1*N的01矩阵A.使得 D=(A*B-C)*A^T最大.其中A^T为A的 ...

  9. 【BZOJ】3996: [TJOI2015]线性代数

    题意 给出一个\(N \times N\)的矩阵\(B\)和一个\(1 \times N\)的矩阵\(C\).求出一个\(1 \times N\)的01矩阵\(A\),使得\[ D = ( A * B ...

随机推荐

  1. mycat sequence

    数据库方式原理在数据库中建立一张表,存放sequence名称(name),sequence当前值(current_value),步长(increment int类型每次读取多少个sequence,假设 ...

  2. StackMapTable format error

    环境:Oracle Java 7 , Mac OSX 报错如上图所示,主要是 Caused by: java.lang.ClassFormatError: StackMapTable format e ...

  3. WPA密码攻击宝典

    原则:密码以8-10位为主.11位仅限于当地手机号.一般人的多年用数字做密码的习惯和心理,先数 字.再字母,或数字.字母重复几遍,字符几乎全用小写,所以淘汰大写及"~!@#$%^&* ...

  4. js刷新当前页面的几种方法

    如何实现刷新当前页面呢?借助js你将无所不能. 1,reload 方法,该方法强迫浏览器刷新当前页面.语法:location.reload([bForceGet])   参数: bForceGet, ...

  5. [hdu3949]XOR(线性基求xor第k小)

    题目大意:求xor所有值的第k小,线性基模板题. #include<cstdio> #include<cstring> #include<algorithm> #i ...

  6. css知多少(1)——我来问你来答(转)

    css知多少(1)——我来问你来答   1. 引言 各位前端或者伪前端(比如作者本人)的同志们,css对你们来说不是很陌生.比如我,在几年之前上大学的时候,给外面做网站就用css,而且必须用css.这 ...

  7. 【总结整理】行内标签span设置position:absolute/float属性可以设置宽度与高度

    postion:absolute 跳出文本流,不是行内元素,设置宽高有效,我的理解. 引用下曹刘阳写的<编写高质量代码-web前端开发修炼之道>一书中看到的一句话:position:abs ...

  8. vmtools!HashTable_GetNumElements+0x5c17

    vmtools!HashTable_GetNumElements+0x5c17 vmtools 应该就是虚拟机和主机通信的问题. HashTable_GetNumElements好想也出错了.

  9. p2234&bzoj1588 营业额统计

    传送门 题目 营业额统计 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况. Tiger拿出了公司的账本,账本上记录了公司成立以来每天的营业额 ...

  10. Luogu 3172 [CQOI2015]选数

    考虑枚举$k$的倍数$dk$,容易知道$\left \lceil \frac{L}{K} \right \rceil\leq d\leq \left \lfloor \frac{H}{k} \righ ...