bfs优化
Ⅰ 内核bfs和cfs的区别
CFS是针对小型设备优化的内核种类,没有得到linux官方的认证.而BFS内核则是官方认证的标准内核.详细特点请看:
本帖隐藏的内容
CFS是针对小型设备优化的内核种类,没有得到linux官方的认证.而BFS内核则是官方认证的标准内核.
BFS:宽度优先搜索算法(又称广度优先搜索)是最简便的图的搜索算法之一,这一算法也是很多重要的图的算法的原型。Dijkstra单源最短路径算法和Prim最小生成树算法都采用了和宽度优先搜索类似的思想。其别名又叫BFS,属于一种盲目搜寻法,目的是系统地展开并检查图中的所有节点,以找寻结果。换句话说,它并不考虑结果的可能位址,彻底地搜索整张图,直到找到结果为止。
CFS:一种新的调度算法,根据CPU的最大需求运行进程,降低代码阅读维护难度,算法思路更为简捷.主要难度特点就是动态优先级的运算.我个人认为从这两个角度要比BFS省电.
Ⅱ sqlserver2005的死锁问题
SQLSERVER处理并发任务能力不差,可能是SQL语句导致大量的锁,严重影响并发性,可尝试优化相应的SQL语句。
Ⅲ python中的数据结构分析
1.Python数据结构篇
数据结构篇主要是阅读[Problem Solving with Python](Welcome to Problem Solving with Algorithms and Data Structures) [该网址链接可能会比较慢]时写下的阅读记录,当然,也结合了部分[算法导论](Introction to Algorithms)
中的内容,此外还有不少wikipedia上的内容,所以内容比较多,可能有点杂乱。这部分主要是介绍了如何使用Python实现常用的一些数据结构,例
如堆栈、队列、二叉树等等,也有Python内置的数据结构性能的分析,同时还包括了搜索和排序(在算法设计篇中会有更加详细的介绍)的简单总结。每篇文
章都有实现代码,内容比较多,简单算法一般是大致介绍下思想及算法流程,复杂的算法会给出各种图示和代码实现详细介绍。
**这一部分是下
面算法设计篇的前篇,如果数据结构还不错的可以直接看算法设计篇,遇到问题可以回来看数据结构篇中的某个具体内容充电一下,我个人认为直接读算法设计篇比
较好,因为大家时间也都比较宝贵,如果你会来读这些文章说明你肯定有一定基础了,后面的算法设计篇中更多的是思想,这里更多的是代码而已,嘿嘿。**
(1)[搜索](Python Data Structures)
简述顺序查找和二分查找,详述Hash查找(hash函数的设计以及如何避免冲突)
(2)[排序](Python Data Structures)
简述各种排序算法的思想以及它的图示和实现
(3)[数据结构](Python Data Structures)
简述Python内置数据结构的性能分析和实现常用的数据结构:栈、队列和二叉堆
(4)[树总结](Python Data Structures)
简述二叉树,详述二叉搜索树和AVL树的思想和实现
2.Python算法设计篇
算法设计篇主要是阅读[Python Algorithms: Mastering Basic Algorithms in the Python Language](Python Algorithms: Mastering Basic Algorithms in the Python Language)[**点击链接可进入Springer免费下载原书电子版**]之后写下的读书总结,原书大部分内容结合了经典书籍[算法导论](Introction to Algorithms),
内容更加细致深入,主要是介绍了各种常用的算法设计思想,以及如何使用Python高效巧妙地实现这些算法,这里有别于前面的数据结构篇,部分算法例如排
序就不会详细介绍它的实现细节,而是侧重于它内在的算法思想。这部分使用了一些与数据结构有关的第三方模块,因为这篇的重点是算法的思想以及实现,所以并
没有去重新实现每个数据结构,但是在介绍算法的同时会分析Python内置数据结构以及第三方数据结构模块的优缺点,也就意味着该篇比前面都要难不少,但
是我想我的介绍应该还算简单明了,因为我用的都是比较朴实的语言,并没有像算法导论一样列出一堆性质和定理,主要是对着某个问题一步步思考然后算法就出来
了,嘿嘿,除此之外,里面还有很多关于python开发的内容,精彩真的不容错过!
这里每篇文章都有实现代码,但是代码我一般都不会分
析,更多地是分析算法思想,所以内容都比较多,即便如此也没有包括原书对应章节的所有内容,因为内容实在太丰富了,所以我只是选择经典的算法实例来介绍算
法核心思想,除此之外,还有不少内容是原书没有的,部分是来自算法导论,部分是来自我自己的感悟,嘻嘻。该篇对于大神们来说是小菜,请一笑而过,对于菜鸟
们来说可能有点难啃,所以最适合的是和我水平差不多的,对各个算法都有所了解但是理解还不算深刻的半桶水的程序猿,嘿嘿。
本篇的顺序按照原书[Python Algorithms: Mastering Basic Algorithms in the Python Language](Python Algorithms: Mastering Basic Algorithms in the Python Language)的章节来安排的(章节标题部分相同部分不同哟),为了节省时间以及保持原著的原滋原味,部分内容(一般是比较难以翻译和理解的内容)直接摘自原著英文内容。
**1.
你也许觉得很多内容你都知道嘛,没有看的必要,其实如果是我的话我也会这么想,但是如果只是归纳一个算法有哪些步骤,那这个总结也就没有意义了,我觉得这
个总结的亮点在于想办法说清楚一个算法是怎么想出来的,有哪些需要注意的,如何进行优化的等等,采用问答式的方式让读者和我一起来想出某个问题的解,每篇
文章之后都还有一两道小题练手哟**
**2.你也许还会说算法导论不是既权威又全面么,基本上每个算法都还有详细的证明呢,读算法导论岂
不更好些,当然,你如果想读算法导论的话我不拦着你,读完了感觉自己整个人都不好了别怪小弟没有提醒你哟,嘻嘻嘻,左一个性质右一个定理实在不适合算法科
普的啦,没有多少人能够坚持读完的。但是码农与蛇的故事内容不多哟,呵呵呵**
**3.如果你细读本系列的话我保证你会有不少收获的,需要看算法导论哪个部分的地方我会给出提示的,嘿嘿。温馨提示,前面三节内容都是介绍基础知识,所以精彩内容从第4节开始哟,么么哒 O(∩_∩)O~**
(1)[Python Algorithms - C1 Introction](Python Algorithms)
本节主要是对原书中的内容做些简单介绍,说明算法的重要性以及各章节的内容概要。
(2)[Python Algorithms - C2 The basics](Python Algorithms)
**本节主要介绍了三个内容:算法渐近运行时间的表示方法、六条算法性能评估的经验以及Python中树和图的实现方式。**
(3)[Python Algorithms - C3 Counting 101](Python Algorithms)
原书主要介绍了一些基础数学,例如排列组合以及递归循环等,但是本节只重点介绍计算算法的运行时间的三种方法
(4)[Python Algorithms - C4 Inction and Recursion and Rection](Python Algorithms)
**本节主要介绍算法设计的三个核心知识:Inction(推导)、Recursion(递归)和Rection(规约),这是原书的重点和难点部分**
(5)[Python Algorithms - C5 Traversal](Python Algorithms)
**本节主要介绍图的遍历算法BFS和DFS,以及对拓扑排序的另一种解法和寻找图的(强)连通分量的算法**
(6)[Python Algorithms - C6 Divide and Combine and Conquer](Python Algorithms)
**本节主要介绍分治法策略,提到了树形问题的平衡性以及基于分治策略的排序算法**
(7)[Python Algorithms - C7 Greedy](Python Algorithms)
**本节主要通过几个例子来介绍贪心策略,主要包括背包问题、哈夫曼编码和最小生成树等等**
(8)[Python Algorithms - C8 Dynamic Programming](Python Algorithms)
**本节主要结合一些经典的动规问题介绍动态规划的备忘录法和迭代法这两种实现方式,并对这两种方式进行对比**
(9)[Python Algorithms - C9 Graphs](Python Algorithms)
**本节主要介绍图算法中的各种最短路径算法,从不同的角度揭示它们的内核以及它们的异同**
Ⅳ 如何优化c++程序运行效率
超时这种问题很常见,尤其是搞竞赛的,这也是问什么搞竞赛的都在研究时间、空间复杂度,及各种算法的原因。当超时问题解决了,可以说你的水平就达到一定程度了。不过对于平时偶尔的超时还是可以通过减少一些for循环、减少%、/等的使用来实现。
不懂再问,请给最佳。谢谢!
Ⅳ BFS++的BFS++在电厂生产管理中实现的功能
对缺陷、工单、隔离单、项目、标准化检修等进行有效管理;它贯穿设备维修的全过程,同时在设备的消缺过程中形成必要的报表。
™ 缺陷管理-缺陷管理是BFS设备管理的重要组成部分,通过日常缺陷处理记录下设备的KKS、缺陷等级、缺陷现象、缺陷类型、缺陷原因及其它信息,形成数据积累,为电厂对缺陷的分析统计(设备缺陷发生率、消缺率、消缺及时率等)提供了数据来源,也为预防性维护与消缺提供了依据和指导。
™ 工单 -在BFS中,工单有三种来源:日常缺陷、计划任务、工程项目(大小修等)。无论是哪种工单,都是围绕着设备的维护检修进行的。工单执行过程中所产生的各种数据都将成为设备维护管理的历史数据,是设备生命周期中数据组成的重要内容。针对设备每一次维修所消耗的材料、备品备件、人力资源、专用工具、成本以及检修报告都可通过工单来进行管理,工单各项属性数据都与工单所对应的设备KKS编码关联。
218
™ 隔 离 单-对维修工作中需要进行隔离的工作开启隔离单。包括填票、签票、接票、批票、执行隔离、功能测试、恢复隔离措施等内容。
™ 项目管理 -对大修、小修、技术改造等维修项目进行管理。根据电厂系统设备的运行状况、安全稳定状态提出大小修或技改项目,周期长、成本高,进行有效的项目管理对于降低总成本和保证机组正常稳定运行具有重要意义
™ 标准化检修 -安排标准化检修项目的计划,包括对工具、备件、安全、时间进度的计划等。BFS的工作计划实现了设备的预防性维护,通过数据的积累,可以制订比较准确的触发条件产生定修计划,对设备可靠性分析提供依据。在此处可以与点检定修系统和实时数据库系统进行接口,通过设备运行的温度、振动、开关次数、运行小时数及其它信号产生工作计划,对设备进行预防性维护,加强对设备的管理,提高设备的寿命。
™ 预算 -对检修工作的费用预算和执行情况进行管理和统计查询。BFS提供了预算功能,能为每个成本中心和子中心,通过成本科目按年和月进行成本预算,同时设定警戒比例,如果达到警戒成本,系统会自动改变图标的颜色进行报警。 通过引进先进业务流程来控制管理费用。BFS++中的很多流程和现有的管理流程有一定的差别,盘电公司结合BFS++的先进理念对现有流程进行了再造。
3.2.1 缺陷单、工单、隔离单运作流程规范化
规范了缺陷单、工单、隔离单运作流程,减少了大量审批手续,节约了大量的时间,为检修人员抓紧时间维护设备节约了大量时间和精力,同时精简了审批流程也就是减少了管理费用,而且使责任更加明确化,同样全公司的人都可以进行监督。在BFS++中,对不同专业、不同设备,基本采用一套流程,这种管理模式体现了管理一体化的基本思想,有利于全厂生产的管理; 流程统一还体现了在维护工作统一在工单/工单分项上,无论是计划还是项目,最终均落于工单/工单分项上, 每一个流程均有相关的责任人,并详细记录责任人及处理时间,体现了注重落实责任的管理方法。
2 物资计划、采购及出入库流程简单实效并且规范化
物资计划、采购及出入库流程结合BFS++原有流程与电厂实际业务,以自然流程进行优化。物资需求计划从原来的7-8级简化到3-4级,需求领料也简化到2-3级。而且从计划到订单到收货单流程衔接紧密,审批的计划项(订单条目)直接和订单或收获项关联,操作简单。从收货到入库界面相通,入库物资有明显标记,并即刻打印入库单和收料单。批准的需求物资在出库界面一目了然,物资属性关联紧密,只需填写出库数量,点击出库便可打印出库单,操作简单而且规范。 BFS++作为成熟的电厂设备管理软件,不仅引入国外企业先进的生产管理理念和设备管理策略,在成本控制方面也有着非常先进的地方,主要体现在以下几个方面:
3.3.1 先进的成本预算和计算方式
BFS++提供了预算功能,公司和各个生产部门在年初进行成本预算,并根据成本科目按年和月进行逐级分解,同时设定警戒比例。随着检修工作的开展,系统根据工单中的成本科目自动累计中各个部门和专业发生的成本,如果达到警戒成本,系统自动会改变颜色进行报警显示。这样各级部门、专业人员随时可查询成本支出情况,分析成本的使用情况,最终实现成本控制。如果设定设备部电气专业一次班的年成本预算为1000元,警戒比例为70%,当一次班发生成本超过700元时,系统自动会改变颜色进行报警显示。
2 成本控制的透明化 BFS++中的成本管理是透明的,主要表现在整个业务流程和预算分解都是透明的,可以很方便地进行查询。
BFS++利用成本科目将预算控制和工单、需求零料等有机结合起来,所有人员通过系统的历史记录,可以清晰地查看每一个流程的审批人员姓名、审批时间,真正实现了责权到位、监督实施。例如:针对一份已经完成的工单,通过“工单-成本”界面可以清晰地看到费用的使用情况,包括:外部服务、内部工时、外部付费、库存材料、外部材料等。如果树立全员参加成本控制的意识,鼓励员工参与监督成本的控制,逐步改进维修策略,可达到降低成本的目的。
220
通过预算将成本逐级分解,可具体的到每个生产班组,使公司内部各级员工都能够及时地了解到相关的成本信息,随时监督费用的使用,使成本控制成为每一名员工的自觉行为。预算控制和成本管理有机地结合在一起,最终实现用价值链效益分析,提高企业的核心竞争力。
3.3.3 使用先进检修策略减少维护费用 BFS++提供了维修策略模块,提供了四种维修策略:故障检修、计划检修、点检定修、状态检修。不同的设备可根据实际情况设置不同的检修策略。
BFS++的检修策略模块是根据一位著名德国电力专家的理论开发的,它会提出各种问题要求用户回答,并且设置一些参数和权值要求用户填写,当用户根据设备的实际运行情况和过去的检修记录回答问题并且填好之后,系统根据先进的设备检修理论自动计算出此台设备应该采取何种检修策略。通过BFS++可以非常容易的查询到与设备相关的缺陷单和工单数量及内容,维修人员可随时了解设备的历史运行情况,逐渐积累经验,实现最好的检修方案,减少检修成本。为确定检修策略提供一定的帮助。
当所有的设备都选择了适当的检修策略之后,就能大大降低系统的隐患,从而能够减少非停和事故,也能提早进行检修,从而减少设备维护的费用。
3.3.4 物资库存管理规范、透明化,降低物资存储费用 物资模块提供了先进的物资管理理念,物资模块提供了最小定额储备和重要性分析等功能,使物资的储存量降到最低点,从而减少存储费用。
BFS++规范了物资的管理,做到物资库存透明化管理。库存物资的价格、数量、库存位置以及占用库存的金额任何人可以随时查询到。计划领料流程的审批状态及审批人可以随时查询,出入库物资的状态可以随时查询到。
可以随时按时间段、按物资属性及保管员等信息查询物资的库存移动情况。 用整理的知识定期对员工进行生产培训,提高员工整体素质。知识和文化体系的形成,为电厂安全生产管理奠定很好基础,一些先进的管理思想和理念自然形成,最终会融会贯通到公司的知识管理和行政管理体系中。
1 BFS++远期价值
2 企业自身价值 形成和提高了电厂的企业核心竞争力,大幅提升电厂自身的企业价值。
3 增加市场分额 BFS++成功应用,提高了生产力,减少了生产成本,增加了市场。 此阶段是一个长期的工作阶段,可分为几个过程。主要任务是形成公司独特的知识与文化体系。
此过程需要长期艰苦细致的工作,成功的关键在于持之以恒。
™ 整理知识过程:此过程宜在BFS++系统正式运行两年左右开始实施。电厂应建立知识整理小组,组员由各专业的专工构成。小组主要工作是对两年来的BFS++系统中的数据进行整理,形成电厂自己的生产运行、设备故障预测及维修知识。以后每年或两年进行一次,对旧知识完善和修正、
221
对新数据进行整理,形成新知识。从而逐渐形成生产记录—形成知识—员工培训—管理生产—再记录的良性知识再生的闭环系统。使电厂知识积累显性化,将人力资本转化为公司拥有的资产,能够留在企业长久地发挥作用。随着BFS++系统的深入应用,数据不断积累,设备维修的知识体系逐渐形成,将会为领导层的相关决策提供了可信的依据。
™ 与其它系统接口:围绕BFS++系统,开发一些外接辅助系统,包括和力源物资采购网的接口、国华ERP的接口、BFS++综合查询、检修文件包等。随着时间的推移BFS++系统的相关功能也会越来越强,BFS++系统在电厂也会得到更加深入的应用
BFS++管理系统经过近三十年的推广使用,整个系统功能比较完善,涵盖了电厂维修管理的各个方面。它不仅包含很先进的软件设计思想,还包含了很多电厂维修管理理念,经过多年的数据积累,它将成为电厂维修数据的信息库,并且将维修的费用管理纳入到BFS++中,便于电厂进行成本控制,使得电厂的费用管理从粗放型像精细型进行转变,成本控制更精确,大大的降低电厂的维护成本,为每个设备建立内容丰富的检修台帐,大大的提高电厂的设备管理水平。相信BFS++系统会为电厂带来更大效益。
Ⅵ 问一下反映中国取得新成就的新闻
新华网北京3月1日电(记者吴晶晶、顾瑞珍)记者日前从全国政协获悉,政协第十届全国委员会民族和宗教委员会几年来在促进少数民族和民族地区经济社会发展、引导宗教界为构建和谐社会作贡献方面取得了显著成绩,“中宗和”工作取得了新的突破。
乞力马扎罗雪顶可能10年内融化,“赤道雪山”奇观将与人类告别…
成都醉驾案疑犯被改判为无期
[孙伟铭父亲称判决不公拟上诉][更多]
·新疆发布公告依法打击针刺犯罪活动
·加拿大部长称希望赖昌星能考虑自愿返华
·印媒再次宣称中国士兵"入侵印度领土"
·山西致277人死溃坝事故现场将建警示广场
·河南平顶山矿难已造成44人死35人失踪
·推广 | 注意!资金正在流向以下板块!
独家:历史学家眼中60年中国
[日军国主义不会复活][中国民族自信心重建]
·深度 | “快女”粉丝江湖的“无间道”
·军事 | 美军将解放军列为假想敌
·博客 | “砖家”点评快女 赌城结婚的明星
·互动 | 真实记录一个农民工的北漂生活
·推广 | 中信信用卡免费申请 即获QQ会员
五年来,民族和宗教委员会围绕国家民族、宗教方面的主要工作积极议政建言,努力推动“中宗和”工作迈上一个新台阶。以促进少数民族和民族地区发展为要务,深入开展调查研究,组织了“退牧还草”跟踪调研和推动少数民族地区社会主义新农村建设、保护和发展少数民族传统文化等问题的专题调研以及青藏铁路开通对沿线少数民族地区经济社会发展推动作用的考察,连续四年召开武陵山民族地区经济社会发展座谈会,关注民族地区人才培养问题,还就城市民族工作、散居少数民族工作等进行调研考察,提出了有关政策建议。
民族和宗教委员会围绕宗教工作的重要问题积极建言献策,推动党的宗教政策的贯彻落实。组织了宗教房产政策落实情况调研,推动有关问题的解决;通过调研考察,推动《宗教事务条例》的贯彻落实;组织宗教院校建设调研,关注宗教人才培养问题。同时引导宗教与社会主义社会相适应,发挥宗教在促进社会和谐方面的积极作用。从2005年开始,民宗委连续两年举办“宗教界为构建社会主义和谐社会作贡献经验交流会”,就宗教界为构建社会主义和谐社会作贡献的途径和方法进行研讨和交流。
值得一提的是,中国宗教界和平委员会的涉外工作不断创新,取得突破,已成为全国政协对外交往的重要平台。民宗委积极指导、支持、协助“中宗和”按照“友好、和平、发展、合作”的宗旨,推动我国宗教界积极参加世界宗教和平运动,并在其中发挥越来越重要的作用,有效地宣传了我国的宗教政策和宗教信仰自由的实际情况,扩大了我国宗教界在国际社会的话语权和影响力,进一步树立了我国的良好国际形象。在对外交往活动中坚决反对分裂,抵御渗透,维护了国家的主权、尊严和根本利益。 民族和宗教委员会还充分发挥自身特点和优势,积极开展形式多样的工作和活动。组织学习考察和联谊活动,凝聚共识,汇集力量;积极反映社情民意,帮助民族地区和宗教界办实事;参与国家有关法律法规的征求意见活动,对有关法律法规提出修改意见;积极开展对外友好交往,宣传我国民族宗教政策和人民政协工作。
(新华网 )
Ⅶ 宽搜和深搜的区别
宽搜:
宽搜是宽度优先搜索的简称,宽度优先搜索算法(又称广度优先搜索)是最简便的图的搜索算法之一,这一算法也是很多重要的图的算法的原型。Dijkstra单源最短路径算法和Prim最小生成树算法都采用了和宽度优先搜索类似的思想。其别名又叫BFS,属于一种盲目搜寻法,目的是系统地展开并检查图中的所有节点,以找寻结果。换句话说,它并不考虑结果的可能位置,彻底地搜索整张图,直到找到结果为止。
深搜:
深搜是深度优先搜索的简称,深度优先搜索所遵循的搜索策略是尽可能“深”地搜索图。在深度优先搜索中,对于最新发现的节点,如果它还有以此为起点而未搜索的边,就沿此边继续搜索下去。当节点v的所有边都己被探寻过,搜索将回溯到发现节点v有那条边的始节点。这一过程一直进行到已发现从源节点可达的所有节点为止。如果还存在未被发现的节点,则选择其中一个作为源节点并重复以上过程,整个进程反复进行直到所有节点都被发现为止。
树的深搜和宽搜的区别:
深度搜索是按照深度优先原则,先笔直往下找子结点 找到那个结点后,又找这个结点的子结点,广度是按照以层为优先进行搜索,树都是一层一层的,找到一个结点后,又找这个结点的兄弟结点。宽搜是用队列来实现,深搜是用栈。
Ⅷ 有邻接矩阵,要求用dijkstra+堆优化+邻接链表求平均最短路径
本人写了 Ford-Fulkerson 邻接矩阵版本的 BFS 和 DFS 的模板和 Ford-Fulkerson 邻接表版本的 BFS 模板 , 还有 Dinic 的邻接矩阵和邻接表模板 , 共 5 个模板解此题 , 以下为 5 份模板的 AC 代码 :
[cpp] view plain
//Ford-Fulkerson
//邻接矩阵BFS
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
#define MAXN 205
#define inf 2100000000
int c[MAXN][MAXN];
int pass[MAXN];
int bfs_max_flow(int n,int s,int t)
{
int pre[MAXN],low[MAXN],head,tail,que[1000],i,maxflow=0;
while (1)
{
memset(pre,-1,sizeof(pre));
head=tail=0;
low[s]=inf;que[tail++]=s;
pre[s]=0;
while (head<tail)
{
int x=que[head++];
for (i=1;i<=n;++i)
if ((c[x][i])&&(pre[i]==-1))
{
que[tail++]=i;
low[i]=low[x]<c[x][i]?low[x]:c[x][i];
pre[i]=x;
}
if (pre[t]!=-1)
{
x=t;
while (x!=s)
{
c[x][pre[x]]+=low[t];
c[pre[x]][x]-=low[t];
x=pre[x];
}
break;
}
}
if (pre[t]!=-1) maxflow+=low[t];
else return maxflow;
}
}
int main()
{
int n,m,i,a,b,d;
while (scanf("%d%d",&n,&m)!=EOF)
{
memset(c,0,sizeof(c));
for (i=1;i<=n;++i)
{
scanf("%d%d%d",&a,&b,&d);
c[a][b]+=d;
}
printf("%d/n",bfs_max_flow(m,1,m));
}
}
//Ford-Fulkerson
//邻接矩阵DFS
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
#define MAXN 205
#define inf 2100000000
int c[MAXN][MAXN];
int pass[MAXN];
int dfs(int n,int s,int t,int low)
{
int i,flow;
if (s==t) return low;
if (pass[s]) return 0;
pass[s]=1;
for (i=1;i<=n;++i)
{
if ((c[s][i])&&(flow=dfs(n,i,t,low<c[s][i]?low:c[s][i])))
{
c[s][i]-=flow;
c[i][s]+=flow;
return flow;
}
}
return 0;
}
int dfs_max_flow(int n,int s,int t)
{
memset(pass,0,sizeof(pass));
int maxflow=0,flow;
while (flow=dfs(n,s,t,inf))
{
memset(pass,0,sizeof(pass));
maxflow+=flow;
}
return maxflow;
}
int main()
{
int n,m,i,a,b,d;
while (scanf("%d%d",&n,&m)!=EOF)
{
memset(c,0,sizeof(c));
for (i=1;i<=n;++i)
{
scanf("%d%d%d",&a,&b,&d);
c[a][b]+=d;
}
printf("%d/n",dfs_max_flow(m,1,m));
}
}
//Ford-Fulkerson
//邻接表BFS
#include<stdio.h>
#include<string.h>
#define MAXN 205
#define inf 2100000000
struct link
{
int nod,val;
link *next;
}head[MAXN];
int bfs_max_flow(int n,int s,int t)
{
int que[1000],he,ta,maxflow=0,low,pre[MAXN];link *p;
while (1)
{
memset(pre,-1,sizeof(pre));
he=ta=0;low=inf;
que[ta++]=s;
while (he<ta)
{
int x=que[he++];
p=head[x].next;
while (p!=NULL)
{
if ((pre[p->nod]==-1)&&(p->val))
{
que[ta++]=p->nod;
low=low<p->val?low:p->val;
pre[p->nod]=x;
}
p=p->next;
}
if (pre[t]!=-1)
{
x=t;
while (x!=s)
{
p=head[pre[x]].next;
while (p->nod!=x) p=p->next;
p->val-=low;
x=pre[x];
}
break;
}
}
if (pre[t]!=-1) maxflow+=low;
else return maxflow;
}
}
int main()
{
link *p,*s;int n,m,i,a,b,d,find;
while (scanf("%d%d",&n,&m)!=EOF)
{
for (i=1;i<=m;++i) {head[i].nod=head[i].val=0;head[i].next=NULL;}
for (i=1;i<=n;++i)
{
scanf("%d%d%d",&a,&b,&d);
if (head[a].next!=NULL)
{
find=0;
p=head[a].next;
do
{
if (p->nod==b) {p->val+=d;find=1;break;}
p=p->next;
}while (p!=NULL);
if (!find)
{
s=new link;
s->nod=b;s->val=d;
s->next=head[a].next;
head[a].next=s;
}
}
else
{
s=new link;
s->nod=b;s->val=d;
s->next=NULL;
head[a].next=s;
}
}
printf("%d/n",bfs_max_flow(m,1,m));
}
}
//Dinic
//邻接矩阵
#include<stdio.h>
#include<string.h>
#define MAXN 205
#define oo 2100000000
int g[MAXN][MAXN],level[MAXN];
int bfs(int n,int s,int t)
{
int que[1000],head,tail,i;
head=tail=0;
que[tail++]=s;
memset(level,-1,sizeof(level));
level[s]=1;
while (head<tail)
{
int x=que[head++];
for (i=1;i<=n;++i)
if ((g[x][i])&&(level[i]==-1))
{
level[i]=level[x]+1;
que[tail++]=i;
}
}
return level[t]+1;
}
int dinic(int n,int s,int t)
{
int maxflow=0,i;
while (bfs(n,s,t))
{
int pos,path[MAXN],cut=0,low,find;
pos=0;
path[pos++]=s;find=1;
while (1)
{
find=1;low=oo;
while ((path[pos-1]!=t)&&(find))
{
find=0;
for (i=1;i<=n;++i)
if ((level[i]==level[path[pos-1]]+1)&&(g[path[pos-1]][i]))
{
path[pos++]=i;
find=1;
break;
}
else if (i==n) break;
}
if (path[pos-1]==t)
{
for (i=0;i<pos-1;++i) if (low>g[path[i]][path[i+1]]) {low=g[path[i]][path[i+1]];cut=i;}
maxflow+=low;
for (i=0;i<pos-1;++i)
{
g[path[i]][path[i+1]]-=low;
g[path[i+1]][path[i]]+=low;
}
pos=cut+1;
}
else
{
if (pos==1) break;
else {level[path[pos-1]]=-1;pos--;}
}
}
}
return maxflow;
}
int main()
{
int n,m,i,a,b,d;
while (scanf("%d%d",&n,&m)!=EOF)
{
memset(g,0,sizeof(g));
for (i=1;i<=n;++i)
{
scanf("%d%d%d",&a,&b,&d);
g[a][b]+=d;
}
printf("%d/n",dinic(m,1,m));
}
return 0;
}
//Dinic
//邻接表
#include<stdio.h>
#include<string.h>
#define MAXN 205
#define oo 2100000000
struct link
{
int nod,val;
link *next;
}head[MAXN];
int level[MAXN],g[MAXN][MAXN];
int bfs(int n,int s,int t)
{
int que[MAXN],he,ta,v;
link *p;
he=ta=0;
que[ta++]=s;
memset(level,-1,sizeof(level));
level[s]=0;
while (he<ta)
{
v=que[he++];
p=head[v].next;
while (p!=NULL)
{
if ((p->val)&&(level[p->nod]==-1))
{
level[p->nod]=level[v]+1;
que[ta++]=p->nod;
}
p=p->next;
}
}
return level[t]+1;
}
int dinic(int n,int s,int t)
{
int path[MAXN],pos,low,i,maxflow=0,cut;
link *p;
while (bfs(n,s,t))
{
pos=0;cut=0;
path[pos++]=s;
while (1)
{
p=head[path[pos-1]].next;
while ((p!=NULL)&&(path[pos-1]!=t))
{
if ((p->val)&&(level[p->nod]==level[path[pos-1]]+1))
{
path[pos++]=p->nod;
p=head[path[pos-1]].next;
continue;
}
else if (p->next==NULL) break;
if (p!=NULL) p=p->next;
}
if (path[pos-1]==t)
{
low=oo;
for (i=0;i<pos-1;++i)
{
p=head[path[i]].next;
while (p->nod!=path[i+1]) p=p->next;
if (p->val<low) {low=p->val;cut=i;}
}
maxflow+=low;
for (i=0;i<pos-1;++i)
{
p=head[path[i]].next;
while (p->nod!=path[i+1]) p=p->next;
p->val-=low;
}
pos=cut+1;
}
else if (pos==1) break;
else {level[path[pos-1]]=-1;pos--;}
}
}
return maxflow;
}
int main()
{
link *p,*s;int m,n,a,b,d;int i;
while (scanf("%d%d",&n,&m)!=EOF)
{
for (i=1;i<=n;++i) head[i].next=NULL;
for (i=1;i<=n;++i)
{
scanf("%d%d%d",&a,&b,&d);
if (head[a].next!=NULL)
{
p=head[a].next;
while (p!=NULL)
{
if (p->nod==b)
{
p->val+=d;
break;
}
p=p->next;
}
if (p==NULL)
{
s=new link;
s->nod=b;
s->val=d;
s->next=head[a].next;
head[a].next=s;
}
}
else
{
s=new link;
s->nod=b;
s->val=d;
s->next=NULL;
head[a].next=s;
}
}
printf("%d/n",dinic(m,1,m));
}
return 0;
}