1. /*
  2. 裸的最大权闭合图
  3. 解:参见胡波涛的《最小割模型在信息学竞赛中的应用
  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<stdlib.h>
  4. #include<queue>
  5. using namespace std;
  6. #define N 55100//刚开始开的是5100一直越界应该是n+m
  7. #define NN 510000
  8. #define inf 0x3fffffff
  9. struct node {
  10. int u,v,w,next;
  11. }bian[NN*8];
  12. int head[N],yong,dis[N],work[N];
  13. void init() {
  14. yong=0;
  15. memset(head,-1,sizeof(head));
  16. }
  17. void addedge(int u,int v,int w) {
  18. bian[yong].v=v;
  19. bian[yong].w=w;
  20. bian[yong].next=head[u];
  21. head[u]=yong++;
  22. }
  23. int bfs(int s,int t)
  24. {
  25. memset(dis,-1,sizeof(dis));
  26. queue<int>q;
  27. q.push(s);
  28. dis[s]=0;
  29. while(!q.empty())
  30. {
  31. int u=q.front();
  32. q.pop();
  33. for(int i=head[u];i!=-1;i=bian[i].next)
  34. {
  35. int v=bian[i].v;
  36. if(bian[i].w&&dis[v]==-1)
  37. {
  38. dis[v]=dis[u]+1;
  39. q.push(v);
  40. if(v==t)
  41. return 1;
  42. }
  43. }
  44. }
  45. return 0;
  46. }
  47. int dfs(int s,int limit,int t)
  48. {
  49. if(s==t)return limit;
  50. for(int &i=work[s];i!=-1;i=bian[i].next)
  51. {
  52. int v=bian[i].v;
  53. if(bian[i].w&&dis[v]==dis[s]+1)
  54. {
  55. int tt=dfs(v,min(limit,bian[i].w),t);
  56. if(tt)
  57. {
  58. bian[i].w-=tt;
  59. bian[i^1].w+=tt;
  60. return tt;
  61. }
  62. }
  63. }
  64. return 0;
  65. }
  66. int dinic(int s,int t)
  67. {
  68. int ans=0;
  69. while(bfs(s,t))
  70. {
  71. memcpy(work,head,sizeof(head));
  72. while(int tt=dfs(s,inf,t))
  73. ans+=tt;
  74. }
  75. return ans;
  76. }
  77. int main(){
  78. int n,m,i,k,sum,u,v,w,s,t;
  79. while(scanf("%d%d",&n,&m)!=EOF) {
  80. init();
  81. s=0;t=n+m+1;
  82. for(i=1;i<=n;i++) {
  83. scanf("%d",&k);
  84. addedge(i,t,k);
  85. addedge(t,i,0);
  86. }
  87. sum=0;
  88. for(i=1;i<=m;i++) {
  89. scanf("%d%d%d",&u,&v,&w);
  90. addedge(s,i+n,w);
  91. addedge(i+n,s,0);
  92. addedge(i+n,u,inf);
  93. addedge(u,i+n,0);
  94. addedge(i+n,v,inf);
  95. addedge(v,i+n,0);
  96. sum+=w;
  97. }
  98. printf("%d\n",sum-dinic(s,t));
  99. }
  100. return 0;}

hdu 3879 最大权闭合图(裸题)的更多相关文章

  1. hdu 2987最大权闭合图模板类型题

    /* 最大权闭合图模板类型的题,考验对知识概念的理解. 题意:如今要辞退一部分员工.辞退每个员工能够的到一部分利益(能够是负的),而且辞退员工,必须辞退他的下属.求最大利益和辞退的最小人数. 最大权闭 ...

  2. hdu 3917 修路与公司 最大权闭合图 好题

    Road constructions Time Limit: 6000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Other ...

  3. hdu 3061 hdu 3996 最大权闭合图 最后一斩

    hdu 3061 Battle :一看就是明显的最大权闭合图了,水提......SB题也不说边数多少....因为开始时候数组开小了,WA....后来一气之下,开到100W,A了.. hdu3996. ...

  4. hdu 3917 (最大权闭合图)

    题意:政府有一些路,m个公司来修,每个公司修路要交税给政府,修路政府要付给公司费用,求政府能获得的最大利润,如果选择一个公司负责一个项目,那么该公司负责的其它项目也必须由他负责,并且与其有相连关系的公 ...

  5. hdu 3996 (最大权闭合图)

    题意:有n个区域布局,每个区域有一些金矿,挖开金矿需要一定的费用,可以得到一定的利润,要想挖开一个金矿,必须挖开所有在这个金矿上边的金矿,求最大利益,给的数据价值太大,用64位. 分析:如果一个金矿可 ...

  6. hdu 3061 (最大权闭合图)

    分析:城池之间有依赖关系,汇点与能获得兵力的城池连接,容量为可以获得的兵力,损耗兵力的城池与汇点连接容量为损耗的兵力,有依赖关系的城池间连边,容量为无穷大,跑网络流求出的最小割就是损耗的最小兵力,,, ...

  7. HDU 3917 最大权闭合图 求最小割

    具体参考http://blog.csdn.net/power721/article/details/6665750 TODO //#pragma comment(linker, "/STAC ...

  8. hdu 3879 hdu 3917 构造最大权闭合图 俩经典题

    hdu3879  base station : 各一个无向图,点的权是负的,边的权是正的.自己建一个子图,使得获利最大. 一看,就感觉按最大密度子图的构想:选了边那么连接的俩端点必需选,于是就以边做点 ...

  9. hdu 3879 Base Station 最大权闭合图

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3879 A famous mobile communication company is plannin ...

随机推荐

  1. Suricata的总体架构

    Suricata的总体架构  报文检测系统通常四大部分,报文获取.报文解码.报文检测.日志记录:suricata不同的功能安装模块划分,一个模块的输出是另一个模块的输入,suricata通过线程将模块 ...

  2. C++ <string> 里面的size_type

    string::size_type string的 str.size() 返回值是一个unsigned,实际上返回的是size_type类型的值. string类和其他的大多数标准库类型都定义了几套配 ...

  3. AS 开发环境配置

    安装时不用设置代理(proxy). 建议选择标准安装,自定义安装容易选掉一些功能.插件. SDK Tools里的(HAXM installer)有时会未安装,安装完需检查(HAXM installer ...

  4. hihocoder offer收割编程练习赛8 C 数组分拆

    思路:(引自bfsoyc的回答:http://hihocoder.com/discuss/question/4160) 动态规划.状态dp[i]表示 前i个数的合法的方案数,转移是 dp[i] = s ...

  5. 亲身经历,Java面试题整理

    博主在2015年暑期参加过一些Java开发工程师实习的面试和笔试,在此将重点整理出来,以供大家学习. 资料1: 一.单继承 1.1Java类是否支持多重继承? 答:继承的基本原则是: 子类继承父类的所 ...

  6. Android小玩意儿-- 从头开发一个正经的MusicPlayer(二)

    1·在Service中实例化MusicPlayer,实现对整个播放过程的控制 上一次做到了找到音乐数据,并封装成对象装在ArrayList里,把数据的信息显示在UI上.下面一个阶段就要开始真正的音乐播 ...

  7. win应用只允许单个实例运行,并将已运行实例窗口置顶

    关键词:windows,c++,桌面应用,单个实例,窗口置顶 目标:1.判断本程序是否已有一个实例在运行.2.若有,则激活已在运行的实例(将其窗口置顶),并退出当前运行. 1.使用semaphore来 ...

  8. File.Exists 文件不存在 Or FileNotFoundException

    标题警告,本文仅限走投无路,最终可能的一个问题导致. 最开始出现在找不到文件,测试发现: 看起来毫无毛病 而后各种测试: 注意看,第一行跟第三行一模一样 发现[@"‪‪‪]这两个字符有毒,如 ...

  9. MATLAB GUI制作快速入门

    创建空白的GUI在MATLAB命令行中输入guide新建GUI,选择Blank GUI (Default),点击确定后就生成了一个空白的GUI制作界面,如下图所示 图1制作GUI的具体过程简单加法器将 ...

  10. oracle的Hint

    与优化器模式相关的Hint 1 ALl_ROWS   让优化器启用CBO /*+ all_rows */ 2  first_rows(n)     让优化器启用CBO 模式,而且得到目标sql的执行计 ...