题意:

n,m<=1e4,c<=1e9

思路:

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. typedef unsigned int uint;
  5. typedef unsigned long long ull;
  6. typedef pair<int,int> PII;
  7. typedef pair<ll,ll> Pll;
  8. typedef vector<int> VI;
  9. #define N 110000
  10. #define M 1100000
  11. #define fi first
  12. #define se second
  13. #define MP make_pair
  14. #define pi acos(-1)
  15. #define mem(a,b) memset(a,b,sizeof(a))
  16. #define rep(i,a,b) for(int i=(int)a;i<=(int)b;i++)
  17. #define per(i,a,b) for(int i=(int)a;i>=(int)b;i--)
  18. #define lowbit(x) x&(-x)
  19. #define Rand (rand()*(1<<16)+rand())
  20. #define id(x) ((x)<=B?(x):m-n/(x)+1)
  21. #define ls p<<1
  22. #define rs p<<1|1
  23.  
  24. const int MOD=1e9+;
  25. double eps=1e-;
  26. ll INF=1e14;
  27.  
  28. priority_queue<pair<ll,int> > q;
  29.  
  30. ll dis[N],dis1[N],dis2[N];
  31. int head[N],vet[N],nxt[N],len[N],vis[N],fan[N],gap[N],n,m,tot,S,T,s;
  32.  
  33. struct arr
  34. {
  35. int x,y,z;
  36. }a[N];
  37.  
  38. int read()
  39. {
  40. int v=,f=;
  41. char c=getchar();
  42. while(c<||<c) {if(c=='-') f=-; c=getchar();}
  43. while(<=c&&c<=) v=(v<<)+v+v+c-,c=getchar();
  44. return v*f;
  45. }
  46.  
  47. void add(int a,int b,int c)
  48. {
  49. nxt[++tot]=head[a];
  50. vet[tot]=b;
  51. len[tot]=c;
  52. head[a]=tot;
  53. }
  54.  
  55. void Add(int a,int b,int c)
  56. {
  57. nxt[++tot]=head[a];
  58. vet[tot]=b;
  59. len[tot]=c;
  60. head[a]=tot;
  61.  
  62. nxt[++tot]=head[b];
  63. vet[tot]=a;
  64. len[tot]=;
  65. head[b]=tot;
  66. }
  67.  
  68. void dijk(int st,int op)
  69. {
  70. mem(vis,);
  71. rep(i,,n) dis[i]=1e13;
  72. while(!q.empty()) q.pop();
  73. q.push(MP(,st)); dis[st]=;
  74. while(!q.empty())
  75. {
  76. int u=q.top().se;
  77. q.pop();
  78. if(vis[u]) continue;
  79. vis[u]=;
  80. int e=head[u];
  81. while(e)
  82. {
  83. int v=vet[e];
  84. if(dis[u]+len[e]<dis[v])
  85. {
  86. dis[v]=dis[u]+len[e];
  87. q.push(MP(-dis[v],v));
  88. }
  89. e=nxt[e];
  90. }
  91. }
  92. if(op==)
  93. {
  94. rep(i,,n) dis1[i]=dis[i];
  95. }
  96. else
  97. {
  98. rep(i,,n) dis2[i]=dis[i];
  99. }
  100. }
  101.  
  102. ll dfs(int u,int aug)
  103. {
  104. if(u==T) return aug;
  105. int e=head[u],flow=;
  106. ll val=s-;
  107. while(e)
  108. {
  109. int v=vet[e];
  110. if(len[e])
  111. {
  112. if(dis[u]==dis[v]+)
  113. {
  114. int t=dfs(v,min(len[e],aug-flow));
  115. len[e]-=t;
  116. len[fan[e]]+=t;
  117. flow+=t;
  118. if(dis[S]>=s) return flow;
  119. if(aug==flow) break;
  120. }
  121. val=min(val,dis[v]);
  122. }
  123. e=nxt[e];
  124. }
  125. if(!flow)
  126. {
  127. gap[dis[u]]--;
  128. if(!gap[dis[u]]) dis[S]=s;
  129. dis[u]=val+;
  130. gap[dis[u]]++;
  131. }
  132. return flow;
  133. }
  134.  
  135. ll maxflow()
  136. {
  137. mem(gap,);
  138. mem(dis,);
  139. gap[]=s;
  140. ll ans=;
  141. while(dis[S]<s) ans+=dfs(S,INF);
  142. return ans;
  143. }
  144.  
  145. int main()
  146. {
  147. //freopen("1.in","r",stdin);
  148. //freopen("1.out","w",stdout);
  149. rep(i,,)
  150. if(i&) fan[i]=i+;
  151. else fan[i]=i-;
  152. int cas=read();
  153. while(cas--)
  154. {
  155. n=read(),m=read();
  156. rep(i,,m)
  157. {
  158. a[i].x=read();
  159. a[i].y=read();
  160. a[i].z=read();
  161. }
  162. tot=;
  163. rep(i,,n) head[i]=;
  164. rep(i,,m) add(a[i].x,a[i].y,a[i].z);
  165. dijk(,);
  166. tot=;
  167. rep(i,,n) head[i]=;
  168. rep(i,,m) add(a[i].y,a[i].x,a[i].z);
  169. dijk(n,);
  170. tot=;
  171. rep(i,,n) head[i]=;
  172. rep(i,,m)
  173. if(dis1[a[i].x]+a[i].z+dis2[a[i].y]==dis1[n])
  174. Add(a[i].x,a[i].y,a[i].z);
  175.  
  176. S=; T=n; s=n;
  177. ll ans=maxflow();
  178. printf("%I64d\n",ans);
  179. }
  180. return ;
  181. }

【HDOJ6582】Path(最短路图,最小割)的更多相关文章

  1. bzoj1266 [AHOI2006]上学路线route floyd建出最短路图+最小割

    1266: [AHOI2006]上学路线route Time Limit: 3 Sec  Memory Limit: 162 MBSubmit: 2490  Solved: 898[Submit][S ...

  2. hdu3870 基于最短路的最小割

    题意:      给你一个平面图,让你输出(1,1),(n ,n)的最小割.. 思路:       看完题想都没想直接最大流,结果TLE,想想也是 G<400*400,400*400*4> ...

  3. hdu 5294 Tricks Device 最短路建图+最小割

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=5294 Tricks Device Time Limit: 2000/1000 MS (Java/Other ...

  4. bzoj 1001 平面图转对偶图 最短路求图最小割

    原题传送门http://www.lydsy.com/JudgeOnline/problem.php?id=1001 整理了下之前A的题 平面图可以转化成对偶图,然后(NlogN)的可以求出图的最小割( ...

  5. UVALive 3661 Animal Run(最短路解最小割)

    题意:动物要逃跑,工作人员要截断从START(左上角)到END(右下角)的道路,每条边权表示拦截该条道路需要多少工作人员.问最少需要多少人才能完成拦截. 通俗地讲,就是把图一分为二所造成消耗的最小值. ...

  6. hdu-5889-最短路+网络流/最小割

    Barricade Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total S ...

  7. SPOJ-OPTM Optimal Marks ★★(按位建图 && 最小割)

    [题意]给出一个无向图,每个点有一个标号mark[i],不同点可能有相同的标号.对于一条边(u, v),它的权值定义为mark[u] xor mark[v].现在一些点的标号已定,请决定剩下点的标号, ...

  8. POJ 2987 Firing【最大权闭合图-最小割】

    题意:给出一个有向图,选择一个点,则要选择它的可以到达的所有节点.选择每个点有各自的利益或损失.求最大化的利益,以及此时选择人数的最小值. 算法:构造源点s汇点t,从s到每个正数点建边,容量为利益.每 ...

  9. BZOJ 1001: [BeiJing2006]狼抓兔子(s-t平面图+最短路求最小割)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1001 题意: 思路:这道题目是最小割题目,但是吧你直接套用Dinic是会超时的. 这里有种很奇妙的做 ...

  10. [luoguP2762] 太空飞行计划问题(最大权闭合图—最小割—最大流)

    传送门 如果将每一个实验和其所对的仪器连一条有向边,那么原图就是一个dag图(有向无环) 每一个点都有一个点权,实验为收益(正数),仪器为花费(负数). 那么接下来可以引出闭合图的概念了. 闭合图是原 ...

随机推荐

  1. 2019/12/22 TZOJ

    4986 Team Formation http://www.tzcoder.cn/acmhome/problemdetail.do?&method=showdetail&id=498 ...

  2. 微信小程序这一块(下)

    1.小程序分为两部分 :页面.组件 2.小程序中如何定义自定义组件? 凡是通过Page创建的都是页面,而通过Components创建的都是组件 当组件创建成功后,在需要使用的页面进行引入,(找到页面的 ...

  3. HTML5-注册表单案例fieldset

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. PHP中的九大缓存技术

    1.全页面静态化缓存也就是将页面全部生成html静态页面,用户访问时直接访问的静态页面,而不会去走php服务器解析的流程.此种方式,在CMS系统中比较常见,比如dedecms: 一种比较常用的实现方式 ...

  5. LinkedList -链表集合

    package cn.learn.collection; import java.util.LinkedList; import java.util.Queue; /* java.util.xxx A ...

  6. Java中的容器(集合)之HashMap源码解析

    1.HashMap源码解析(JDK8) 基础原理: 对比上一篇<Java中的容器(集合)之ArrayList源码解析>而言,本篇只解析HashMap常用的核心方法的源码. HashMap是 ...

  7. Linux删除自带的openjdk,安装jdk1.8

    第一步:查看有哪些安装包 [root@localhost ~]# rpm -qa | grep javatzdata-java-2016g-2.el7.noarchpython-javapackage ...

  8. KNN算法案例--手写数字识别

    import numpy as np import matplotlib .pyplot as plt import pandas as pd from sklearn.neighbors impor ...

  9. hdu3664 Permutation Counting(dp)

    hdu3664 Permutation Counting 题目传送门 题意: 在一个序列中,如果有k个数满足a[i]>i:那么这个序列的E值为k,问你 在n的全排列中,有多少个排列是恰好是E值为 ...

  10. 如何优化MySQL千万级大表

    很好的一篇博客,转载 如何优化MySQL千万级大表 原文链接::https://blog.csdn.net/yangjianrong1985/article/details/102675334 千万级 ...