不想说题意了 。作法和POJ 2112相同。

但是TLE 10+。。。其实一开始我也没注意数据,但是TLE之后才发现N = 200 ,E = 40000 ,dinic的复杂度是 N * N * E ,这样就8E了。。就TLE了。

最后翻了下DISCUSS,发现数据还是没那么变态的,但是算法得加优化,这道题也加深了我对dinic算法的理解。

刚才把前面做过的网络流代码都加了这个优化的判断,发现速度快了一倍左右。。。

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <queue>
#include <map>
using namespace std;
#define Max 2500
#define mem(a,b) memset(a,b,sizeof(a))
int N,M,C;
#define inf 1 << 30
#include <cstring>
#include <string>struct kdq
{int s , e , l ,next ;
} ed[Max * 100] ;
struct kdq1
{int s ,e ,l ;
} e[40005] ;
int head[205] ,num ;
int S,T ;
void add(int s ,int e ,int l )
{ed[num].s = s ;ed[num].e = e ;ed[num].l = l ;ed[num].next = head[s] ;head[s] = num ++ ;ed[num].s = e ;ed[num].e = s ;ed[num].l = 0 ;ed[num].next = head[e] ;head[e] = num ++ ;}void init()
{memset(head,-1,sizeof(int) * (T + 1)) ;num = 0 ;
}
int deep[205] ;
int qe[Max * 100] ;
int dinic_bfs()
{memset(deep,-1,sizeof(int) * (T + 1)) ;deep[S] = 0 ;int h = 0 ,t = 0 ;qe[h ++ ] = S ;while(h > t){int tt = qe[t ++ ] ;for (int i = head[tt] ; ~i ; i = ed[i].next ){int e = ed[i].e ;int l = ed[i].l ;if(deep[e] == -1 && l > 0 ){deep[e] = deep[tt] + 1 ;qe[h ++ ] = e ;}}}return deep[T] != -1 ;
}int dinic_dfs(int now ,int f )
{if(now == T)return f ;int flow = 0 ;for (int i = head[now] ; ~i ; i = ed[i].next ){int e = ed[i].e ;int l = ed[i].l ;if(deep[e] == deep[now] + 1 && l > 0 && (f - flow))//f - flow > 0 加了这个优化就A了。否则T到死{int mm = min(l,f - flow) ;int nn = dinic_dfs(e , mm) ;flow += nn ;ed[i].l -= nn ;ed[i ^ 1].l += nn ;}}if(!flow )deep[now] = -2 ;return flow ;
}
int dinic()
{int flow = 0 ;int f ;while(dinic_bfs()){flow += dinic_dfs(S,inf) ;}return flow ;
}
void build_Map(int mid)
{init() ;for (int i = 1 ; i <= C ; i ++ ){if(e[i].l <= mid){add(e[i].s ,e[i].e ,1) ;add(e[i].e ,e[i].s ,1) ;}}add(S,1,inf) ;add(N,T,inf) ;
}
int main()
{scanf("%d%d%d",&N,&C,&M) ;int l = inf ,r = -1 ;S = 0 ,T = N + 1 ;for (int i = 1 ; i <= C ; i ++ ){scanf("%d%d%d",&e[i].s,&e[i].e,&e[i].l) ;l = min(l,e[i].l) ;r = max(r,e[i].l) ;}int mid = l + r >> 1 ;while(r > l){mid = (l + r ) >> 1 ;build_Map(mid) ;int ans = dinic() ;if(ans < M) l = mid + 1 ;else r = mid ;}printf("%d\n",r) ;return 0;
}

POJ 2455 dinic相关推荐

  1. POJ 2455 Secret Milking Machine 二分枚举 + 最大流

    题目:http://poj.org/problem?id=2455 题意:给定一张无向图,有n个节点p条边,要求在图中从1到n找到t条路径,并且使这t条路径中的最长边最小,输出这个最小的最长边 思路: ...

  2. POJ 1273 Dinic

    题意 传送门 POJ 1273 Drainage Ditches 题解 最大流模板题,使用 DinicDinicDinic 算法求解. #include <algorithm> #incl ...

  3. POJ 2455 Secret Milking Machine (二分+无向图最大流)

    [题意]n个点的一个无向图,在保证存在T条从1到n的不重复路径(任意一条边都不能重复)的前提下,要使得这t条路上经过的最长路径最短. 之所以把"经过的最长路径最短"划个重点是因为前 ...

  4. poj 2455 Secret Milking Machine(二分枚举+最大流)

    题意: 题意:FJ有N块地,这些地之间有P条双向路,每条路的都有固定的长度l.现在要你找出从第1块地到第n块地的T条不同路径,每条路径上的路不能与先前的路径重复,问这些路径中的最长路的最小是多少. 思 ...

  5. POJ 2455 Secret Milking Machine

    POJ_2455 每条路只走一次可以通过网络流来保证,而对于让最长的边最小可以通过二分枚举来搞定. #include<stdio.h> #include<string.h> # ...

  6. Secret Milking Machine POJ - 2455

    点击打开链接 二分最大边 记为lim 不超过lim的边容量记为1 否则记为0 再抽象一个源点 从源点到1的容量为题目所给的t 然后以此建图 看是否满流 感觉网络流的抽象建图很关键 这道题看了别人的建图 ...

  7. poj pku图论、网络流入门题总结、汇总

    poj pku图论.网络流入门题总结.汇总 分类: acm图论 2010-08-25 18:49 243人阅读 评论(0) 收藏 举报 网络算法networkgraphconstructioninte ...

  8. POJ 图论分类 + DP(较全 自己又加了点)

    DP -----------动态规划 状态压缩DP 2411 (棋盘规模较大)状态压缩DP+DFS+滚动数组 2664 (棋盘规模较小)直接递推即可(DP) 2506 (棋盘规模较小)直接递推即可(D ...

  9. POJ 1966 枚举 + Dinic

    题意 传送门 POJ 1966 Cable TV Network 题解 若无向图不连通,则图中至少存在两个点不连通,则可以枚举这两个点.若两个不同的点 s , t s,t s,t 因为删去某个点集而不 ...

最新文章

  1. 2022-2028年中国聚碳酸亚丙酯(PPC)行业市场深度分析及未来趋势预测报告
  2. Lab模式的妙用--人像处理
  3. centos7 df 命令卡死
  4. PHP学习总结(会话控制)
  5. vmware上安装vxworks(xp环境)
  6. adcetris研发历程_AZ、MSD、吉利德争相布局ADC药物
  7. CSS3-多列布局-伸缩盒布局-伸缩项目
  8. AIO系列文档(1)----图解ByteBuffer
  9. 为什么要重写hashCode()
  10. server.htaccess 具体解释以及 .htaccess 參数说明
  11. 【转】Popclip的JSON格式化扩展
  12. 老司机的HCIE战报
  13. word操作 mathtype插入公式 表格
  14. 基于 BIP39 协议创建 Ethereum HD Wallet
  15. 【历史上的今天】6 月 3 日:微软推出必应搜索引擎;Larry Roberts 启动阿帕网;Visual Basic 之父出生
  16. Maya 交互式播放
  17. python三维图视角旋转_在python-matplotlib-Jupyter Noteb中交互式旋转三维绘图
  18. python制作词典软件_Python爬虫之二:自制简易词典
  19. 南开大学计算机科学与技术研究生院,2021年南开大学计算机科学与技术(081200)硕士研究生招生信息_考研招生计划和招生人数 - 学途吧...
  20. Java中哪些集合是有序的?

热门文章

  1. 游戏辅助制作核心--植物大战僵尸逆向之天上下钻石(五)
  2. 动态路由协议的归纳总结
  3. linux服务器重启日志,Linux系统最近重启时间、错误日志
  4. P2P终结者---控制整个局域网网络的管理软件
  5. 三、Amlogic A311D 音频驱动指南
  6. 多人同步在线编辑文档(onlyoffice)服务器部署-测试
  7. xampp mysql ssl_xampp搭建https服务器
  8. spotify歌曲下载_k表示使用Spotify歌曲功能进行聚类
  9. Nginx中的location规则与rewrite重写(详解)
  10. applicationContext.xml读取properties中属性