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;
}