每条边流量有下界有费用,很显然是有上下界有源汇最小费用最大流

连边(s,1,(0,inf),0),(i,t,(0,inf),0),表示从1出发inf次从每个点结束inf次

连边(i,j,(1,inf),v[i][j]),表示ij之间有剧情的话就至少走一次,每次走花费v[i][j]时间

然后套有上下界有源汇最小费用最大流(…………)板子即可

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<queue>
  4. using namespace std;
  5. const int N=505;
  6. int n,m,a[N],h[N],cnt=1,s,t,fr[N],dis[N],d[N],ans;
  7. bool v[N];
  8. struct qwe
  9. {
  10. int ne,no,to,va,c;
  11. }e[N*N];
  12. int read()
  13. {
  14. int r=0,f=1;
  15. char p=getchar();
  16. while(p>'9'||p<'0')
  17. {
  18. if(p=='-')
  19. f=-1;
  20. p=getchar();
  21. }
  22. while(p>='0'&&p<='9')
  23. {
  24. r=r*10+p-48;
  25. p=getchar();
  26. }
  27. return r*f;
  28. }
  29. void add(int u,int v,int w,int c)
  30. {
  31. cnt++;
  32. e[cnt].ne=h[u];
  33. e[cnt].no=u;
  34. e[cnt].to=v;
  35. e[cnt].va=w;
  36. e[cnt].c=c;
  37. h[u]=cnt;
  38. }
  39. void ins(int u,int v,int w,int c)
  40. {
  41. add(u,v,w,c);
  42. add(v,u,0,-c);
  43. }
  44. void wk(int u,int v,int l,int r,int c)
  45. {
  46. d[v]+=l,d[u]-=l;
  47. ans+=l*c;
  48. ins(u,v,r-l,c);
  49. }
  50. bool spfa()
  51. {
  52. queue<int>q;
  53. for(int i=s;i<=t;i++)
  54. dis[i]=1e9;
  55. dis[s]=0;
  56. v[s]=1;
  57. q.push(s);
  58. while(!q.empty())
  59. {
  60. int u=q.front();
  61. q.pop();
  62. v[u]=0;
  63. for(int i=h[u];i;i=e[i].ne)
  64. if(e[i].va>0&&dis[e[i].to]>dis[u]+e[i].c)
  65. {
  66. dis[e[i].to]=dis[u]+e[i].c;
  67. fr[e[i].to]=i;
  68. if(!v[e[i].to])
  69. {
  70. v[e[i].to]=1;
  71. q.push(e[i].to);
  72. }
  73. }
  74. }
  75. return dis[t]<1e9;
  76. }
  77. void mcf()
  78. {
  79. int x=1e9;
  80. for(int i=fr[t];i;i=fr[e[i].no])
  81. x=min(x,e[i].va);//cerr<<x<<endl;
  82. for(int i=fr[t];i;i=fr[e[i].no])
  83. {
  84. e[i].va-=x;
  85. e[i^1].va+=x;
  86. ans+=x*e[i].c;
  87. }
  88. }
  89. int main()
  90. {
  91. n=read();
  92. wk(n+1,1,0,5000,0);
  93. for(int i=1;i<=n;i++)
  94. {
  95. int m=read();
  96. for(int j=1;j<=m;j++)
  97. {
  98. int x=read(),y=read();
  99. wk(i,x,1,1e9,y);
  100. }
  101. wk(i,n+2,0,5000,0);
  102. }
  103. s=1,t=n+3;
  104. for(int i=1;i<=n+2;i++)
  105. {
  106. if(d[i]>0)
  107. ins(s,i,d[i],0);
  108. else
  109. ins(i,t,-d[i],0);
  110. }
  111. while(spfa())
  112. mcf();
  113. printf("%d\n",ans);
  114. return 0;
  115. }

bzoj 3876: [Ahoi2014&Jsoi2014]支线剧情【有上下界有源汇最小费用最大流】的更多相关文章

  1. bzoj 2055: 80人环游世界【有上下界有源汇最小费用最大流】

    连有上下界的边(ss,i,(0,m),0),(i',t,(0,m),0),表示从任意点开始和结束 连(i,j,(0,m),d[i][j]),表示可以买票飞过去 连(i,i',(v[i],v[i]),0 ...

  2. [AHOI2014/JSOI2014]支线剧情 有上下界费用流

    ---题面--- 题解: 第一眼费用流,,然后想了好久怎么建图,,,最后发现是最小费用可行流的板子题.... 其实还没有很懂这个算法,所以这里只是摆一下步骤,以后再补理解吧. 首先一个思路就是转换图, ...

  3. BZOJ3876[Ahoi2014&Jsoi2014]支线剧情——有上下界的最小费用最大流

    题目描述 [故事背景] 宅男JYY非常喜欢玩RPG游戏,比如仙剑,轩辕剑等等.不过JYY喜欢的并不是战斗场景,而是类似电视剧一般的充满恩怨情仇的剧情.这些游戏往往 都有很多的支线剧情,现在JYY想花费 ...

  4. BZOJ 3876 [Ahoi2014&Jsoi2014]支线剧情

    题解: 带下界的费用流 对于x->y边权为z Addedge(x,t,1,0) Addedge(s,y,1,z) Addedge(x,y,inf,0) 然后对每个点Addedge(i,1,inf ...

  5. bzoj3876: [Ahoi2014&Jsoi2014]支线剧情(上下界费用流)

    传送门 一道题让我又要学可行流又要学zkw费用流…… 考虑一下,原题可以转化为一个有向图,每次走一条路径,把每一条边都至少覆盖一次,求最小代价 因为一条边每走过一次,就要付出一次代价 那不就是费用流了 ...

  6. BZOJ 3876 [AHOI/JSOI2014]支线剧情 (最小费用可行流)

    题面:洛谷传送门 BZOJ传送门 题目大意:给你一张有向无环图,边有边权,让我们用任意条从1号点开始的路径覆盖这张图,需要保证覆盖完成后图内所有边都被覆盖至少一次,求覆盖路径总长度的最小值 最小费用可 ...

  7. BZOJ3876 AHOI/JSOI2014支线剧情(上下界网络流)

    原图所有边下界设为1上界设为inf花费为时间,那么显然就是一个上下界最小费用流了.做法与可行流类似. 因为每次选的都是最短路增广,且显然不会有负权增广路,所以所求出来的可行流的费用就是最小的. #in ...

  8. bzoj 2502: 清理雪道【有上下界有源汇最小流】

    对于原有边,流区间是(1,inf),按着原边连,然后再连(s,i,(0,inf)),(i,t,(0,inf))表示任意位置进出雪场 按着这个建出新图 然后最小流的方法是先跑可行流,设ans为(t,s, ...

  9. 【BZOJ-3876】支线剧情 有上下界的网络流(有下界有源有汇最小费用最大流)

    3876: [Ahoi2014]支线剧情 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 821  Solved: 502[Submit][Status ...

随机推荐

  1. Android笔记之平移View

    方法有多种,只讲一种 使用View.setLeft和View.setRight 对于wrap_content的View,要横向平移,setRight是必要的,否则View的宽度会被改变(right应设 ...

  2. React-Router4按需加载

    其实几种实现都是近似的,但具体上不太一样,其中有些不需要用到bundle-loader 第一种:ReactTraining/react-router 介绍的基于 webpack, babel-plug ...

  3. !推荐:下载abap 源代码

    转自http://blog.sina.com.cn/s/blog_4d1570de0100pvhd.html *@------------------------------------------- ...

  4. jstat监控gc情况

    jstat监控gc情况 JavaJVMJ2SE应用服务器SUN  性能测试过程中,我们该如何监控java虚拟机内存的使用情况,用以判断JVM是否存在内存问题呢?如何判断JVM垃圾回收是否正常?一般的t ...

  5. curl上传图片(同域上传)

    先研究完curl同域上传图片然后再研究curl跨域上传,先把同域上传代码总结如下: index.php <?php //图片上传 $url = "http://192.168.1.23 ...

  6. Java锁机制-重入锁

    锁的种类: 读写锁   悲观锁  乐观锁 CSA无锁  自旋锁  AQS 非公平锁 公平锁 互斥锁 排它锁  分布式锁(redis实现 和 zk实现) 轻量级锁(lock),重量级锁(synchron ...

  7. 自建 AppRTC

    自建 AppRTC 字数3158 阅读1718 评论2 喜欢2 AppRTC 是 webrtc 的一个 demo.自建 AppRTC 可以苦其心志劳其筋骨饿其体肤,更重要的是能学会 webrtc 服务 ...

  8. 细谈HTML解析模块

     细谈HTML解析模块 Html在网页中所占的位置,用一个简单直观的图给展示一下:    

  9. jquery跨域3

    这两天用 Jquery 跨域取数据的时候,经常碰到 invalid label 这个错误,十分的郁闷,老是取不到服务器端发送回来的 json 值, 一般跨域用到的两个方法为:$.ajax 和$.get ...

  10. codevs 3012 线段覆盖4

    传送门 3012 线段覆盖 4  时间限制: 1 s  空间限制: 64000 KB  题目等级 : 黄金 Gold   题目描述 Description 数轴上有n条线段,线段的两端都是整数坐标,坐 ...