hoj 2739 中國郵局問題

  1 /*若原圖的基圖不連通,
  2 或者存在某個點的入度或出度為 0 則無解。
  3 統計所有點的入度出度之差 Di, 對于 Di > 0 的點,
  4 加邊(s, i, Di, 0); 對于 Di < 0 的點加邊(i, t, -Di,0);
  5 對原圖中的每條邊(i, j),
  6 在網絡中加邊(i, j, ∞, Dij),Dij 為邊(i, j)的權值。
  7 求一次最小費用流,費用加上原圖所有邊權和即為結果。
  8 若進一步要求輸出最小權值回路,則對所有流量 fij > 0 的邊(i, j),在原圖中復制fij 份,這樣原圖便成為歐拉圖,求一次歐拉回路即可。
  9 */
 10 #include <iostream>
 11 #include <cstdio>
 12 #include <cstring>
 13 #include <queue>
 14 #include <algorithm>
 15 #include <cmath>
 16 
 17 using namespace std;
 18 
 19 const int maxn = 1e2 + 5;
 20 const int maxm = 2e4 + 5;
 21 const int inf = 0x3f3f3f3f;
 22 
 23 struct MCMF {
 24     struct Edge {
 25         int v, c, w, next;
 26     }p[maxm << 1];
 27     int e, head[maxn], dis[maxn], pre[maxn], cnt[maxn], sumFlow, n;
 28     bool vis[maxn];
 29     void init(int nt){
 30         e = 0, n = nt + 1;
 31         memset(head, -1, sizeof(head[0]) * (n + 2));
 32     }
 33     void addEdge(int u, int v, int c, int w){
 34         p[e].v = v; p[e].c = c; p[e].w = w; p[e].next = head[u]; head[u] = e++;
 35         swap(u, v);
 36         p[e].v = v; p[e].c = 0; p[e].w = -w; p[e].next = head[u]; head[u] = e++;
 37     }
 38     bool spfa(int S, int T){
 39         queue <int> q;
 40         for (int i = 0; i <= n; ++i)
 41             vis[i] = cnt[i] = 0, pre[i] = -1, dis[i] = inf;
 42         vis[S] = 1; dis[S] = 0;
 43         q.push(S);
 44         while (!q.empty()){
 45             int u = q.front(); q.pop();
 46             vis[u] = 0;
 47             for (int i = head[u]; i + 1; i = p[i].next){
 48                 int v = p[i].v;
 49                 if (p[i].c && dis[v] > dis[u] + p[i].w){
 50                     dis[v] = dis[u] + p[i].w;
 51                     pre[v] = i;
 52                     if (!vis[v]){
 53                         q.push(v);
 54                         vis[v] = 1;
 55                         if (++cnt[v] > n) return 0;
 56                     }
 57                 }
 58             }
 59         }
 60         return dis[T] != inf;
 61     }
 62     int mcmf(int S, int T){
 63         sumFlow = 0;
 64         int minFlow = 0, minCost = 0;
 65         while (spfa(S, T)){
 66             minFlow = inf + 1;
 67             for (int i = pre[T]; i + 1; i = pre[ p[i ^ 1].v ])
 68                 minFlow = min(minFlow, p[i].c);
 69             sumFlow += minFlow;
 70             for (int i = pre[T]; i + 1; i = pre[ p[i ^ 1].v ]){
 71                 p[i].c -= minFlow;
 72                 p[i ^ 1].c += minFlow;
 73             }
 74             minCost += dis[T] * minFlow;
 75         }
 76         return minCost;
 77     }
 78     int ind[maxn], outd[maxn], ans ;
 79     bool build(int nt, int mt){
 80         init(nt);
 81         memset(ind, 0, sizeof(ind));
 82         memset(outd, 0, sizeof(outd));
 83         ans = 0;
 84         int u, v, c;
 85         while (mt--){
 86             scanf("%d%d%d", &u, &v, &c);
 87             u++, v++;
 88             addEdge(u, v, inf, c);
 89             ans += c;
 90             outd[u]++, ind[v]++;
 91         }
 92         for (int i = 1; i <= nt; ++i){
 93             if (ind[i] == 0 || outd[i] == 0) return false;
 94         }
 95         for (int i = 1; i <= nt; ++i){
 96             if (ind[i] - outd[i] > 0)
 97                 addEdge(0, i, ind[i] - outd[i], 0);
 98             else if (ind[i] - outd[i] < 0) 
 99                 addEdge(i, n, outd[i] - ind[i], 0);
100         }
101         return true;
102     }
103     void solve(){
104         ans += mcmf(0, n);
105         printf("%d\n", ans);
106     }
107 }my;
108 int main(){
109     int tcase, n, m;
110     scanf("%d", &tcase);
111     while (tcase--){
112         scanf("%d%d", &n, &m);
113         if (!my.build(n, m)){
114             printf("-1\n");
115             continue;
116         }
117         my.solve();
118     }
119     return 0;
120 }

?

轉載于:https://www.cnblogs.com/Missa/p/3273552.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/259429.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/259429.shtml
英文地址,請注明出處:http://en.pswp.cn/news/259429.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

R語言編程藝術(3)R語言編程基礎

本文對應《R語言編程藝術》 第7章&#xff1a;R語言編程結構&#xff1b; 第9章&#xff1a;面向對象的編程&#xff1b; 第13章&#xff1a;調試 R語言編程結構 控制語句&#xff1a; 循環&#xff1a; for (n in x) { } while (condition) { } repeat { }另外break也可以用在…

用C++流成員函數put輸出單個字符

轉載&#xff1a;http://c.biancheng.net/cpp/biancheng/view/254.html 在程序中一般用cout和插入運算符“<<”實現輸出&#xff0c;cout流在內存中有相應的緩沖區。有時用戶還有特殊的輸出要求&#xff0c;例如只輸出一個字符。ostream類除了提供上面介紹過的用于格式控…

linux 擴充db2表空間,如何擴充db2的表空間、加容器等表空間維護操作

db2 "alter tablespace GJDATA resize (FILE /backup/GJDATA32K45G)"db2 "alter tablespace GJIDX resize (FILE /backup/GJIDX32K45G)"容器路徑 db2 list tablespace containers for8容器大小 db2pd -d uibsch -tablespaces降低容器空間 resize 增加容器…

CheckBox控件

前臺代碼&#xff1a; 1 <asp:CheckBox ID"CheckBox1" runat"server" Text "蘋果"/> 2 <asp:CheckBox ID"CheckBox2" runat"server" Text "檸檬"/> 3 <asp:CheckBox ID"CheckBox3" runa…

.NET垃圾回收筆記

名詞 垃圾收集目標 ephemeral GC發生在Gen 0 和Gen 1 的垃圾收集 Full GC發生Gen 2 及以上的Gen與LOH的垃圾收集 垃圾收集模式 工作站模式GC直接發生在內存分配的線程&#xff08;也是當前的工作托管線程&#xff09;上 服務器模式每個CPU核都有一個自己獨立的GC線程與托管堆 垃…

go.js中的圖標(icons)的使用

2019獨角獸企業重金招聘Python工程師標準>>> 1、圖標庫下載&#xff1a; 將icons引入&#xff1a;http://gojs.net/latest/samples/icons.js 2、樣式演示 地址&#xff1a;http://gojs.net/latest/samples/icons.html 轉載于:https://my.oschina.net/u/2391658/blog…

Pygame - Python游戲編程入門(1)

前言 在上一篇中&#xff0c;我們初步熟悉了pygame的控制流程&#xff0c;但這對于一個游戲而言是遠遠不夠的。所以在這一篇中&#xff0c;我們的任務是添加一架飛機&#xff08;玩家&#xff09;&#xff0c;并且能夠控制它進行移動&#xff0c;這樣我們就又離目標進了一步了~…

C++字符輸入getchar()和字符輸出putchar()

轉載&#xff1a;http://c.biancheng.net/cpp/biancheng/view/117.html C還保留了C語言中用于輸入和輸出單個字符的函數&#xff0c;使用很方便。其中最常用的有getchar函數和putchar函數。 putchar函數(字符輸出函數) putchar函數的作用是向終端輸出一個字符。例如&#xf…

linux實現shell,linux

4.5Mhttp://www.starbase-929.net/media/Calibre%20Library/Ken%20O.%20Bartch/Linux%20Shell%20Scription%20With%20Bash%20(1778)/Linux%20Shell%20Scription%20With%20Bash%20-%20Ken%20O.%20Bartch.pdfstarbase-929.net全網免費4.0Mhttp://www.myaitcampus.net/elibrary/im…

AQS淺析

2019獨角獸企業重金招聘Python工程師標準>>> AQS的原理淺析 本文是《Java特種兵》的樣章&#xff0c;本書即將由工業出版社出版 AQS的全稱為&#xff08;AbstractQueuedSynchronizer&#xff09;&#xff0c;這個類也是在java.util.concurrent.locks下面。這個類似乎…

str045漏洞提權linux,Linux運維知識之CVE-2016-5195 Dirtycow: Linux內核提權漏洞

本文主要向大家介Linux運維知識之CVE-2016-5195 Dirtycow&#xff1a; Linux內核提權漏洞紹了&#xff0c;通過具體的內容向大家展現&#xff0c;希望對大家學習Linux運維知識有所幫助。CVE-2016-5195 Dirtycow&#xff1a; Linux內核提權漏洞以下都是github上找的源碼&#xf…

編程如寫作

昨晚似乎是個適合寫作的夜&#xff0c;不論是自己還是朋友&#xff0c;都比平常更容易被觸動。看著微博上朋友們的心路&#xff0c;想寫點什么卻似乎找不出非常值得大書特書的主題&#xff0c;只是歪坐在電腦旁&#xff0c;喝著咖啡&#xff0c;單曲循環著倉木麻衣的《time aft…

C++中cin、cin.get()、cin.getline()、getline()等函數的用法

轉載&#xff1a;http://www.cnblogs.com/flatfoosie/archive/2010/12/22/1914055.html c輸入流函數主要以下幾個&#xff1a; 1、cin 2、cin.get() 3、cin.getline() 4、getline() 附:cin.ignore();cin.get()//跳過一個字符,例如不想要的回車,空格等字符 1、cin>>…

工作環境總結(1)開發環境搭建

1、安裝git 安裝文件&#xff1a;Git-2.12.0-64-bit.exe 下載地址&#xff1a;https://github.com/git-for-windows/git/releases/download/v2.12.0.windows.1/Git-2.12.0-64-bit.exe 在git bash中配置&#xff0c;git bash命令行中執行&#xff08;只有使用到egit時使用&…

c語言煙花百度云,C語言實現放煙花的程序

這是一個利用C語言編寫放煙花的程序(同時也可以播放音樂)&#xff0c;供大家參考&#xff0c;具體內容如下代碼如下#pragma once#include#include //圖形界面庫頭文件#include //計算圓形的軌跡坐標#include#include#include#include#pragma comment(lib,"winmm.lib"…

決定人生的七條公式

1 .積跬步以致千里&#xff0c;積怠惰以致深淵 1.01^365 37.80.99^365 0.032.拖延癥 U EV/ID U完成任務的程度 E對成功的信心 V 對任務的愉悅度 I 你的分心程度 D你多久會獲得回報3.三天打魚兩天曬網&#xff0c;終將一無所獲 1.01^3 x 0.99^2 < 1.01 4.愛因斯坦的成…

strncpy與strcpy的區別與注意事項

strncpy 是 C語言的庫函數之一&#xff0c;來自 C語言標準庫&#xff0c;定義于 string.h&#xff0c;char *strncpy(char *dest, char *src, int n)&#xff0c;把src所指字符串的前n個字節復制到dest所指的數組中&#xff0c;并返回指向dest的指針。 strcpy只是復制字符串&am…

使用ssh公鑰實現免密碼登錄

ssh 無密碼登錄要使用公鑰與私鑰。linux下可以用用ssh-keygen生成公鑰/私鑰對&#xff0c;下面我以CentOS為例。 有機器A(192.168.1.155)&#xff0c;B(192.168.1.181)。現想A通過ssh免密碼登錄到B。 首先以root賬戶登陸為例。 1.在A機下生成公鑰/私鑰對。 [rootA ~]# ssh-keyg…

15款的視頻處理軟件免費下載

因為需要購買昂貴的視頻處理軟件和高性能圖形計算機&#xff0c;所以視頻處理是一項比較耗費金錢的技術活。正是由于這樣&#xff0c;一部分人選擇使用性能較好的免費在線編輯軟件&#xff0c;無需太多視頻處理知識便可在瀏覽器中剪切和編輯視頻。然而&#xff0c;當我們無法連…

液位系統c語言程序,超聲波自動測量物體液位系統的設計

超聲波自動測量物體液位系統的設計(任務書,畢業論文15000字)摘要本系統以STC89C52單片機為核心&#xff0c;通過硬件電路連接和軟件程序的編寫實現通用型超聲波自動測量物體液位系統的設計。其主要原理是由單片機控制超聲波發射電路發射超聲波&#xff0c;超聲波接收電路接收遇…