题意:





思路:

先Floyd一遍两两点之间的最短路 二分答案

建图

跑Dinic

只要不像我一样作死#define int long long 估计都没啥事……

我T到死辣……..

最后才改过来……

(不过注意一哈 答案 &最短路确实是会爆int的)

  1. //By SiriusRen
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <algorithm>
  5. using namespace std;
  6. #define N 667
  7. int f,m,xx,yy,cow[222],cap[222],zz,all;
  8. long long map[222][222],maxx;
  9. struct Dinic{
  10. int first[N],next[N*1000],v[N*1000],tot,vis[N],w[N*1000],q[N*1000],head,tail;
  11. void init(){
  12. memset(first,-1,sizeof(first)),tot=0;
  13. }
  14. void add(int x,int y,int z){
  15. w[tot]=z,v[tot]=y,next[tot]=first[x],first[x]=tot++;
  16. w[tot]=0,v[tot]=x,next[tot]=first[y],first[y]=tot++;
  17. }
  18. bool tell(){
  19. head=0,tail=1;
  20. memset(vis,-1,sizeof(vis));
  21. vis[0]=0,q[0]=0;
  22. while(head<tail){
  23. int t=q[head++];
  24. for(int i=first[t];~i;i=next[i])
  25. if(vis[v[i]]==-1&&w[i])
  26. vis[v[i]]=vis[t]+1,q[tail++]=v[i];
  27. }
  28. return vis[666]!=-1;
  29. }
  30. int flow(int x,int y){
  31. if(x==666)return y;
  32. int r=0;
  33. for(int i=first[x];~i&&y>r;i=next[i])
  34. if(w[i]&&vis[v[i]]==vis[x]+1){
  35. int t=flow(v[i],min(y-r,w[i]));
  36. w[i]-=t,w[i^1]+=t,r+=t;
  37. }
  38. if(!r)vis[x]=-1;
  39. return r;
  40. }
  41. int work(){
  42. int ans=0,jy;
  43. while(tell())while(jy=flow(0,0x3fffffff))ans+=jy;
  44. return ans;
  45. }
  46. bool check(long long x){
  47. init();
  48. for(int i=1;i<=f;i++)add(0,i,cow[i]),add(i+f,666,cap[i]);
  49. for(int i=1;i<=f;i++)
  50. for(int j=1;j<=f;j++)
  51. if(map[i][j]<=x)
  52. add(i,j+f,0x3fffffff);
  53. return work()==all;
  54. }
  55. }dinic;
  56. signed main(){
  57. memset(map,0x3f,sizeof(map));
  58. scanf("%d%d",&f,&m);
  59. for(int i=1;i<=f;i++)map[i][i]=0;
  60. for(int i=1;i<=f;i++)scanf("%d%d",&cow[i],&cap[i]),all+=cow[i];
  61. for(int i=1;i<=m;i++){
  62. scanf("%d%d%d",&xx,&yy,&zz);
  63. map[xx][yy]=min(map[xx][yy],(long long)zz),map[yy][xx]=map[xx][yy];
  64. }
  65. for(int k=1;k<=f;k++)
  66. for(int i=1;i<=f;i++)
  67. for(int j=1;j<=f;j++){
  68. map[i][j]=min(map[i][j],map[i][k]+map[k][j]);
  69. if(map[i][j]<=1000000000LL*200)maxx=max(maxx,map[i][j]);
  70. }
  71. long long l=0,r=maxx,ans=-1;
  72. while(l<=r){
  73. long long Mid=(l+r)/2;
  74. if(dinic.check(Mid))r=Mid-1,ans=Mid;
  75. else l=Mid+1;
  76. }
  77. printf("%lld\n",ans);
  78. }

POJ 2391 Floyd+二分+拆点最大流的更多相关文章

  1. POJ 2391 floyd二分+拆点+最大流

    Ombrophobic Bovines Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 20904   Accepted: 4 ...

  2. POJ 2391 Ombrophobic Bovines ★(Floyd+二分+拆点+最大流)

    [题意]有n块草地,一些奶牛在草地上吃草,草地间有m条路,一些草地上有避雨点,每个避雨点能容纳的奶牛是有限的,给出通过每条路的时间,问最少需要多少时间能让所有奶牛进入一个避雨点. 和POJ2112很类 ...

  3. POJ 2391 Ombrophobic Bovines ( 经典最大流 && Floyd && 二分 && 拆点建图)

    题意 : 给出一些牛棚,每个牛棚都原本都有一些牛但是每个牛棚可以容纳的牛都是有限的,现在给出一些路与路的花费和牛棚拥有的牛和可以容纳牛的数量,要求最短能在多少时间内使得每头牛都有安身的牛棚.( 这里注 ...

  4. POJ 2391 Ombrophobic Bovines(二分+拆点+最大流)

    http://poj.org/problem?id=2391 题意: 给定一个无向图,点i处有Ai头牛,点i处的牛棚能容纳Bi头牛,求一个最短时间T,使得在T时间内所有的牛都能进到某一牛棚里去. 思路 ...

  5. poj 2391 (Floyd+最大流+二分)

    题意:有n块草地,一些奶牛在草地上吃草,草地间有m条路,一些草地上有避雨点,每个避雨点能容纳的奶牛是有限的,给出通过每条路的时间,问最少需要多少时间能让所有奶牛进入一个避雨点. 两个避雨点间可以相互到 ...

  6. 【bzoj1738】[Usaco2005 mar]Ombrophobic Bovines 发抖的牛 Floyd+二分+网络流最大流

    题目描述 FJ's cows really hate getting wet so much that the mere thought of getting caught in the rain m ...

  7. poj 2391 Ombrophobic Bovines, 最大流, 拆点, 二分, dinic, isap

    poj 2391 Ombrophobic Bovines, 最大流, 拆点, 二分 dinic /* * Author: yew1eb * Created Time: 2014年10月31日 星期五 ...

  8. POJ 2112 Optimal Milking ( 经典最大流 && Floyd && 二分 )

    题意 : 有 K 台挤奶机器,每台机器可以接受 M 头牛进行挤奶作业,总共有 C 头奶牛,机器编号为 1~K,奶牛编号为 K+1 ~ K+C ,然后给出奶牛和机器之间的距离矩阵,要求求出使得每头牛都能 ...

  9. Risk UVA - 12264 拆点法+最大流+二分 最少流量的节点流量尽量多。

    /** 题目:Risk UVA - 12264 链接:https://vjudge.net/problem/UVA-12264 题意:给n个点的无权无向图(n<=100),每个点有一个非负数ai ...

随机推荐

  1. PHP+MySQL登录注册,完整版,详细注释

    纯手写打造. 下载地址:http://download.csdn.net/detail/qq_33599520/9779970 项目结构: 下面是代码: <!DOCTYPE html> & ...

  2. PostgreSQL Replication之第一章 理解复制概念(3)

    1.3 使用分片和数据分配 本节您将了解基本可扩展性技术,例如数据库分片.分片被广泛应用于高端系统并提供一个简单而且可靠的扩展设置方式来向外扩展.近年来,分片已经成为一种扩大专业系统规模的标准方式. ...

  3. MPP的进化 - 深入理解Batch和MPP优缺点

    https://mp.weixin.qq.com/s/scXNfkpjktCZxBg3pYEUUA?utm_medium=hao.caibaojian.com&utm_source=hao.c ...

  4. javascript面向对象编程,带你认识封装、继承和多态

    原文链接:点我 周末的时候深入的了解了下javascript的面向对象编程思想,收获颇丰,感觉对面向对象编程有了那么一丢丢的了解了~很开森 什么是面向对象编程 先上一张图,可以对面向对象有一个大致的了 ...

  5. 学习优化《机器学习与优化》中文PDF+英文PDF

    正在学习机器学习中的优化处理,感觉<机器学习与优化>写得还是比较通俗易懂的,第七章特征选择我需要,特征提取:相关系数,相关比,熵和互信息..更高级的应该是文本挖掘的特征提取,比如LDA提取 ...

  6. 【Codeforces Round #423 (Div. 2) A】Restaurant Tables

    [Link]:http://codeforces.com/contest/828/problem/A [Description] 有n个组按照时间顺序来餐馆; 每个组由一个人或两个人组成; 每当有一个 ...

  7. Spring-statemachine给end状态设置action

    Spring-statemachine版本:当前最新的1.2.3.RELEASE版本 builder.configureStates() .withStates() .initial(generate ...

  8. [Python] Statistical analysis of time series

    Global Statistics: Common seen methods as such 1. Mean 2. Median 3. Standard deviation:  the larger ...

  9. Firefox中使用pac

    https://campus.barracuda.com/product/websecurityservice/article/WSS/ConfigProxyWithPACFile/ https:// ...

  10. 4.angularJS-指令(directive)

    转自:https://www.cnblogs.com/best/p/6225621.html 指令(directive)是AngularJS模板标记和用于支持的JavaScript代码的组合.Angu ...