第一次网络流,学了一天的DINIC算法(个人比较愚),切了这个入门题,开始的时候怎么调连
测试都过不了,后来发现犯了一个低级错误!把判断条件放在for(;)!里面和放在for下面大大
不同啊!里面的话,一遇到不符合立即结束了(相当于break)!而下面的可以continue!
dinic算法,每次BFS根据残量网络作层次图,每做一次后DFS找一个增广路(我是到目标点就return,

每次记录该增广路中的最窄边,回溯时按最窄边更新图即可)。

#include<iostream>  //16ms 1A
#include<vector>
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
const int inf=0x3f3f3f3f;
int m,n;
struct edge
{int to,f,pre;
};
int mark=0;int minf=inf;             //一条增广路最窄的边
int head[201];vector<edge>edges(403);
int vis[201];int level[201];
bool bfs()                         //层次图,根据残量网络记录与原点的距离(层次)
{for(int i=1;i<=n;i++){vis[i]=level[i]=0;}vis[1]=1;queue<int>q;q.push(1);while(!q.empty()){int cur=q.front();q.pop();for(int i=head[cur];i!=-1;i=edges[i].pre){if(edges[i].f>0&&!vis[edges[i].to])  //放里面{vis[edges[i].to]=1;q.push(edges[i].to);level[edges[i].to]=level[cur]+1;}}}return vis[n];          //访问不到目标地,结束(找不到增广路)
}
void dfs(int cur)           //每次找一条增广路
{if(cur==n||mark){mark=1;return;}for(int i=head[cur];i!=-1&&!mark&&minf;i=edges[i].pre)  {int v=edges[i].to;int temp=edges[i].f;if(level[v]==level[cur]+1&&temp){int tmin=minf;if(minf>temp)minf=temp;dfs(v);if(mark){edges[i].f-=minf;edges[i^1].f+=minf;}else               //非目的地的回溯,minf作为全局变量,要改回来。minf=tmin;}}return ;
}
int main()
{while(~scanf("%d%d",&m,&n)){int s,l,c;memset(head,-1,sizeof(head));for(int i=0;i<2*m;i++){scanf("%d%d%d",&s,&l,&c);edges[i].to=l;edges[i].pre=head[s];head[s]=i;edges[i].f=c;i++;edges[i].to=s;edges[i].pre=head[l];head[l]=i;edges[i].f=0;}long long maxflow=0;while(bfs()){mark=0;minf=inf;dfs(1);maxflow+=minf;}printf("%lld\n",maxflow);}
}

转载于:https://www.cnblogs.com/yezekun/p/3925747.html

poj1273最大流初破相关推荐

  1. poj1273 最大流

    用的是EdmondsKarp 程序可以再优化的,懒得优化了 EdmondsKarp #include <iostream> #include<stdio.h> #include ...

  2. java非阻塞io流_阻塞式和非阻塞io流初认识

    1  什么是阻塞式和非阻塞式? 阻塞式IO:IO即input/output,阻塞式IO指的是"一旦输入/输出工作没有完成,则程序阻塞,直到输入/输出工作完成".在目前,我们从书本上 ...

  3. 实测百度如流:精致又豪横! AI协同办公应有的样貌

    蓄力一纪,可以远矣. 古人称12年为一纪.当一款深藏修炼了12年,也就是一纪的互联网产品正式对外公测,是怎样一种体验? 单拿时长来看,如同互联网活化石一般存在,在整个圈子里堪称传奇. 就在近日,百度贡 ...

  4. Java基础学习笔记(十六)—— Sream流

    Sream流 1 Stream流初体验 2 Stream流概述 3 生成Stream流 4 中间操作方法 5 终结操作方法 6 收集操作方法 7 Stream流案例 1 Stream流初体验 案例需求 ...

  5. 【渝粤题库】陕西师范大学300005 中国历史文选

    <中国历史文选>作业 一.解释下列句子中黑体加线的字或词 1.三月丙午,入曹.数之,以其不用僖负羁而乘轩者三百人也,且曰:"献状." 2.微楚之惠不及此,退三舍辟之,所 ...

  6. HTML写一首简单的居中唐诗,韩愈写的诗最简单的10篇

    韩愈是古文运动的倡导者,主张继承先秦两汉散文传统,反对专讲声律对仗而忽视内容的骈体文.韩愈文章气势雄伟,说理透彻,逻辑性强,被尊为"唐宋八大家"之首.时人有"韩文&quo ...

  7. 李清照词全集,共49首,有百家评说,附 txt 文本下载,就在本帖的附件中。

    李清照词全集,共49首,有百家评说,附 txt 文本下载,就在本帖的附件中. 李清照(1084-约1151年):南宋女词人.号易安居士,齐州章丘(今属山东)人.父李格非为当时著名学者,夫赵明诚为金石考 ...

  8. 宋词欣赏 -- 李清照词全集

    远方在呼唤 如梦令 常记溪亭日暮,沉醉不知归路. 兴尽晚回舟,误入藕花深处. 争渡,争渡,惊起一滩鸥鹭. 如梦令 昨夜雨疏风骤,浓睡不消残酒. 试问卷帘人,却道海棠依旧. 知否?知否?应是绿肥红瘦. ...

  9. ElasticsearchTemplate的详细使用,完成多条件查询、匹配度查询 . . .

    ElasticsearchTemplate是Spring对ES的java api进行的封装,提供了大量的相关的类来完成各种各样的查询.在日常的使用中,应该说最常用的查询就是queryList方法. p ...

  10. SpringBoot Elasticsearch

    文章目录 Windwos Elasticsearch Elasticsearch 基本介绍 Elasticsearch 6.8.5 单机安装 kibana6.8.5 可视化工具 Springboot ...

最新文章

  1. 全球通信云市场爆发增长,RTC 技术普惠还有多远
  2. sql2000数据库置疑
  3. Linux常用的基本命令01
  4. inet_aton和inet_network和inet_addr三者比较-《别怕Linux编程》之五
  5. Makefile的重建与include指令
  6. php的socket通信
  7. Map的并发处理(ConcurrentHashMap)
  8. java比较时间sql_如何正确比较日期 java.sql.Date
  9. 在.NET3.5平台上使用LinQ to SQL + NBear 创建三层WEB应用
  10. 前端学习(2776):组件的生命周期和过程
  11. OpenTelemetry-可观察性的新时代
  12. 超好看倒计时特效单页html模板源码下载
  13. windows tcp端口占满_TCP与UDP分析、三次握手四次断开、DDOS
  14. Linux 字符集 en_us,Linux语言环境:en_US.UTF-8 vs en_US
  15. 如何在打开谷歌的时候强制跳转google.com
  16. 【DBN预测】基于粒子群算法优化DBN深度置信网络实现数据预测matlab代码
  17. 2021-11-01 讲题题解
  18. python编程自然数表达式_实现四则运算 (python实现)by 周乃君 张宏根
  19. Win10红警如何关闭3d加速?
  20. 2021 年第一个双月总结

热门文章

  1. python做服务器需要什么模块_用Python自带的包建立简单的web服务器
  2. 混日子的老程序员感受结对编程的威力【工作效率狂提高】
  3. pycharm搭建第一个django项目
  4. 重温JS基础--引用类型(一)
  5. SQL 语句与性能之联合查询和联合分类查询
  6. 利用 Composer 完善自己的 PHP 框架(二)——发送邮件
  7. [Linux] RIO C++封装
  8. Codeigniter处理用户登录验证后URL跳转
  9. MySQL服务器的启动与停止
  10. Linux如何查找软件的安装位置