题意:假如存在矩阵A,A[i][0] + A[i][1] + ...... + A[i][n - 1] == SR[i],A[0][j] + A[1][j] + ...... + A[n - 1][j] == SC[j].(0 <= A[i][j] <= 100),输出YES并输出任意一个满足条件的矩阵A,若不存在则输出NO

分析:SR[0] + SR[1] + ...... + SR[n - 1] == SC[0] + SC[1] + ...... + SC[n - 1],建图的重点是把银行和公司之间的边的容量都设为100,作为流的上限.

aaarticlea/png;base64,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" alt="" />当图的最大流等于SR的和则找到了满足条件的矩阵.

另外,输出矩阵时,由于建图方法的特殊性,要用栈来倒序输出.

  1. #include <cstdio>
  2. #include <cstring>
  3. const int MAXN=;//点数的最大值
  4. const int MAXM=;//边数的最大值
  5. const int INF=0x3fffffff;
  6.  
  7. struct Node
  8. {
  9. int from,to,next;
  10. int cap;
  11. }edge[MAXM];
  12.  
  13. int tol;
  14. int head[MAXN];
  15. int dep[MAXN];
  16. int gap[MAXN];//gap[x]=y :说明残留网络中dep[i]==x的个数为y
  17.  
  18. int n;//n是总的点的个数,包括源点和汇点
  19.  
  20. void init()
  21. {
  22. tol=;
  23. memset(head,-,sizeof(head));
  24. }
  25.  
  26. void addedge(int u,int v,int w)
  27. {
  28. edge[tol].from=u;
  29. edge[tol].to=v;
  30. edge[tol].cap=w;
  31. edge[tol].next=head[u];
  32. head[u]=tol++;
  33. edge[tol].from=v;
  34. edge[tol].to=u;
  35. edge[tol].cap=;
  36. edge[tol].next=head[v];
  37. head[v]=tol++;
  38. }
  39. void BFS(int start,int end)
  40. {
  41. memset(dep,-,sizeof(dep));
  42. memset(gap,,sizeof(gap));
  43. gap[]=;
  44. int que[MAXN];
  45. int front,rear;
  46. front=rear=;
  47. dep[end]=;
  48. que[rear++]=end;
  49. while(front!=rear)
  50. {
  51. int u=que[front++];
  52. if(front==MAXN)front=;
  53. for(int i=head[u];i!=-;i=edge[i].next)
  54. {
  55. int v=edge[i].to;
  56. if(dep[v]!=-)continue;
  57. que[rear++]=v;
  58. if(rear==MAXN)rear=;
  59. dep[v]=dep[u]+;
  60. ++gap[dep[v]];
  61. }
  62. }
  63. }
  64. int SAP(int start,int end)
  65. {
  66. int res=;
  67. BFS(start,end);
  68. int cur[MAXN];
  69. int S[MAXN];
  70. int top=;
  71. memcpy(cur,head,sizeof(head));
  72. int u=start;
  73. int i;
  74. while(dep[start]<n)
  75. {
  76. if(u==end)
  77. {
  78. int temp=INF;
  79. int inser;
  80. for(i=;i<top;i++)
  81. if(temp>edge[S[i]].cap)
  82. {
  83. temp=edge[S[i]].cap;
  84. inser=i;
  85. }
  86. for(i=;i<top;i++)
  87. {
  88. edge[S[i]].cap-=temp;
  89. edge[S[i]^].cap+=temp;
  90. }
  91. res+=temp;
  92. top=inser;
  93. u=edge[S[top]].from;
  94. }
  95. if(u!=end&&gap[dep[u]-]==)//出现断层,无增广路
  96. break;
  97. for(i=cur[u];i!=-;i=edge[i].next)
  98. if(edge[i].cap!=&&dep[u]==dep[edge[i].to]+)
  99. break;
  100. if(i!=-)
  101. {
  102. cur[u]=i;
  103. S[top++]=i;
  104. u=edge[i].to;
  105. }
  106. else
  107. {
  108. int min=n;
  109. for(i=head[u];i!=-;i=edge[i].next)
  110. {
  111. if(edge[i].cap==)continue;
  112. if(min>dep[edge[i].to])
  113. {
  114. min=dep[edge[i].to];
  115. cur[u]=i;
  116. }
  117. }
  118. --gap[dep[u]];
  119. dep[u]=min+;
  120. ++gap[dep[u]];
  121. if(u!=start)u=edge[S[--top]].from;
  122. }
  123. }
  124. return res;
  125. }
  126. int main()
  127. {
  128. int sr,sc,sum;
  129. while(~scanf("%d",&n))
  130. {
  131. int N = n;
  132. n = * n + ;
  133. init();
  134. int s = n - ,t = n - ;
  135. sum = ;
  136. for(int i = ;i < N;i++)
  137. {
  138. scanf("%d",&sr);
  139. sum += sr;
  140. addedge(s,i,sr);
  141. }
  142. for(int i = ;i < N;i++)
  143. {
  144. scanf("%d",&sc);
  145. addedge(N + i,t,sc);
  146. }
  147. for(int i = ;i < N;i++)
  148. {
  149. for(int j = ;j < N;j++)
  150. {
  151. addedge(i,N + j,);
  152. }
  153. }
  154. if(SAP(s,t) == sum)
  155. {
  156. printf("YES\n");
  157. int stk[],sn = ;
  158. for(int i = ;i < N;i++)
  159. {
  160. for(int j = head[i];edge[j].next != -;j = edge[j].next)
  161. {
  162. stk[sn++] = - edge[j].cap;
  163. }
  164. printf("%d",stk[--sn]);
  165. while(sn > )
  166. {
  167. printf(" %d",stk[--sn]);
  168. }
  169. printf("\n");
  170. }
  171. }
  172. else
  173. printf("NO\n");
  174. }
  175. return ;
  176. }

toj 1421的更多相关文章

  1. TOJ 2776 CD Making

    TOJ 2776题目链接http://acm.tju.edu.cn/toj/showp2776.html 这题其实就是考虑的周全性...  贡献了好几次WA, 后来想了半天才知道哪里有遗漏.最大的问题 ...

  2. [Codevs 1421]秋静叶&秋穣子(最大-最小博弈)

    题目:http://codevs.cn/problem/1421/ 分析:有向树上的最大-最小博弈 先手与后手的策略不同: 先手A:让对方取得尽量少的前提下,自己取得尽量大 后手B:让自己取得尽量多的 ...

  3. HDU 1421 搬寝室

    搬寝室 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submiss ...

  4. codevs 1421 秋静叶&秋穣子(树上DP+博弈)

    1421 秋静叶&秋穣子   题目描述 Description 在幻想乡,秋姐妹是掌管秋天的神明,作为红叶之神的姐姐静叶和作为丰收之神的妹妹穰子.如果把红叶和果实联系在一 起,自然会想到烤红薯 ...

  5. TOJ 1702.A Knight's Journey

    2015-06-05 问题简述: 有一个 p*q 的棋盘,一个骑士(就是中国象棋里的马)想要走完所有的格子,棋盘横向是 A...Z(其中A开始 p 个),纵向是 1...q. 原题链接:http:// ...

  6. TOJ 1139.Compromise

    2015-06-03 问题简述: 大概就是输入两段文本(用小写英文字母表示),分别用#表示一段话的结束输入,输出这两个文本的最长公共子序列. 简单的LCS问题,但是输入的是一段话了,而且公共部分比较是 ...

  7. 优先队列运用 TOJ 4123 Job Scheduling

    链接:http://acm.tju.edu.cn/toj/showp4123.html 4123.   Job Scheduling Time Limit: 1.0 Seconds   Memory ...

  8. 最小生成树 TOJ 4117 Happy tree friends

    链接http://acm.tju.edu.cn/toj/showp4117.html 4117.   Happy tree friends Time Limit: 1.0 Seconds   Memo ...

  9. TOJ 4120 Zombies VS Plants

    链接:http://acm.tju.edu.cn/toj/showp4120.html 4120.   Zombies VS Plants Time Limit: 1.0 Seconds   Memo ...

随机推荐

  1. Knights of the Round Table(Tarjan+奇圈)

    http://poj.org/problem?id=2942 题意:n个武士,某些武士之间相互仇视,如果在一起容易发生争斗事件.所以他们只有满足一定的条件才能参加圆桌会议:(1)相互仇视的两个武士不能 ...

  2. codeforce 杀题计划

    先尽量做Div 1 A B 想做难题时做C 全天学竞赛时每天至少两道Div2 (算法数据结构没学的先过,题面很长的......也先过  我的英语啊...)

  3. bzoj3224 普通平衡树(splay 模板)

    3224: Tyvj 1728 普通平衡树 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 11427  Solved: 4878[Submit][St ...

  4. Treap(模板)

    人生第一次平衡树,Treap板子 #include<iostream> #include<cstdio> #include<cstring> #include< ...

  5. Unity项目 - 捡苹果 Apple Picker

    项目展示 Github项目地址:Apple Picker 涉及知识 正投视图 3D场景内树与苹果的图层 记录最高分到本地 准备工作 模型制作: 基本模型创建 树叶:sphere 拉伸为椭圆形,绿色材质 ...

  6. 关于C++ const 变量

    const 的全局变量是储存在一个只读数据段中,虽然你可以定义一个指向它的指针,却会在运行时,在对该地址赋值的时候发生运行错误,而局部的const变量是储存在栈中的,离开作用域后同样会被释放,并且可以 ...

  7. win快速搜索软件

    Everything 与其他搜索工具的简单比较: Everything 是至今为止 X-Force 所使用过速度最快的文件搜索工具.与它相似的有异次元曾经介绍过一款很老的软件AVAFind,也非常的优 ...

  8. C# 文件操作【转】

    本文也收集了目前最为常用的C#经典操作文件的方法,具体内容如下:C#追加.拷贝.删除.移动文件.创建目录.递归删除文件夹及文件.指定文件夹下面的所有内容copy到目标文件夹下面.指定文件夹下面的所有内 ...

  9. photoshop制作古风画

    效果图: 素材结构: 前期准备: 素材准备,我的素材包括:印章.花束.二次元妹纸,背景图片. 软件准备,用的软件是 photoshop CS6. 把二次元妹纸拖入photoshop,把她抠出来,Ctr ...

  10. Hash二次探测

    Hash的二次探测,当hash的长度为n:插入val,当Hash[val]不为0时,选择新地址newval = val +(-) 1*1,val+(-)2*2,val+(-)(n-1)*(n-1); ...