poj3422 Kaka's Matrix Travels(最小費用最大流問題)

  1 /*
  2 poj3422 Kaka's Matrix Travels 
  3 不知道 k次 dp做為什么不對???
  4 看了大牛的代碼,才知道還可以這樣做! 
  5 開始沒有理解將a 和 a‘ 之間建立怎樣的兩條邊,導致程序一直陷入死循環,真心花了好長時間,快崩潰了。無語..... 
  6 題意:有個方陣,每個格子里都有一個非負數,從左上角走到右下角,每次走一步,只能往右或往下走,經過的數字拿走 
  7 每次都找可以拿到數字和最大的路徑走,走k次,求最大和 
  8  
  9 這是 最大費用最大流 問題  每次spfa都找的是一條和最大的路徑 s--到左上角的邊流量是K限制增廣次數 
 10  
 11 求最大費用最大流只需要把費用換成相反數,用最小費用最大流求解即可 
 12  
 13  
 14 構圖過程:
 15 每個點拆分成兩個  a   a'   之間建兩條邊(當然還要建退邊),分別是   (費用為該點相反數,流量為1) (費用為0,流量為k-1) 
 16 路過這點時,可以通過前邊那條邊拿到數字, 
 17 以后再從這兒過,就沒有數字可拿了,走的就是第二條邊 
 18  
 19 然后是 沒點向 右和下 建一條邊  費用0,流量k 
 20 */
 21 #include<iostream>
 22 #include<queue>
 23 #include<cstring>
 24 #include<cstdio> 
 25 #define N 50000
 26 #define M 5005
 27 #define Max 0x3f3f3f3f
 28 using namespace std;
 29 class EDGE
 30 {
 31 public:
 32    int u, v, c, f;
 33    int next;
 34 };
 35 queue<int>q; 
 36 EDGE edge[N];
 37 int cap[55][55], n, k;
 38 int pre[N], first[N];
 39 int dist[M], vis[M];
 40 int edgeN;
 41 int s, t;
 42 int maxFlow;
 43 
 44 int spfa()
 45 {
 46     memset(dist, 0x3f, sizeof(dist));
 47     memset(vis, 0, sizeof(vis));
 48     memset(pre, -1, sizeof(pre));
 49     dist[s]=0;
 50     q.push(s);
 51     vis[s]=1;
 52     while(!q.empty())
 53     {
 54         int u=q.front();
 55         q.pop();
 56         vis[u]=0;
 57         for(int e=first[u]; e!=-1; e=edge[e].next)
 58         {
 59           int v=edge[e].v; 
 60           if(dist[v]>dist[u] + edge[e].c && edge[e].f>0)
 61            {
 62                dist[v]=dist[u] + edge[e].c;
 63                pre[v]=e;
 64                if(!vis[v])
 65                {
 66                      vis[v]=1;
 67                      q.push(v);
 68            }
 69        }
 70     } 
 71      }
 72      if(dist[t]==Max)
 73        return 0;
 74      return 1;
 75 }
 76 
 77 void updateFlow()
 78 {
 79    int minF=Max;
 80    for(int e=pre[t]; e!=-1; e=pre[edge[e].u])
 81      if(minF>edge[e].f)
 82         minF=edge[e].f;
 83    for(int e=pre[t]; e!=-1; e=pre[edge[e].u])
 84    {
 85       edge[e].f-=minF;
 86       edge[e^1].f+=minF;
 87       maxFlow+=minF*edge[e].c;
 88    }
 89 }
 90 
 91 void adde(int u, int v, int c, int f)
 92 {
 93     edge[edgeN].u=u; edge[edgeN].v=v;
 94     edge[edgeN].c=c; edge[edgeN].f=f;
 95     edge[edgeN].next=first[u]; first[u]=edgeN++;
 96     
 97     edge[edgeN].u=v; edge[edgeN].v=u;
 98     edge[edgeN].c=-c; edge[edgeN].f=0;
 99     edge[edgeN].next=first[v]; first[v]=edgeN++;
100 }
101 
102 int main()
103 {
104    int i, j;
105    while(scanf("%d%d", &n, &k)!=EOF)
106    {
107       maxFlow=0;
108       edgeN=0;
109       memset(first, -1, sizeof(first));
110       s=0; t=n*n*2+1;
111       for(i=1; i<=n; ++i)
112         for(j=1; j<=n; ++j)
113           scanf("%d", &cap[i][j]);
114       adde(s, 1, 0, k);
115       for(i=1; i<=n; ++i)
116         for(j=1; j<=n; ++j)//n*n個節點,拆點之后變成2*n*n個節點 
117         {
118            int nb=(i-1)*n+j;
119            adde(2*nb-1, 2*nb, -cap[i][j], 1);//注意:a到a`是建立兩條邊,但是兩條邊的費用和容量不一樣 
120            adde(2*nb-1, 2*nb, 0, k-1);
121            if(j<n)//向右建圖 
122              adde(2*nb, 2*(nb+1)-1, 0, k);
123            if(i<n)//向下建圖 
124              adde(2*nb, 2*(nb+n)-1, 0, k);
125     }
126        adde(n*n*2, t, 0, k);
127        
128        while(spfa())//建好圖之后,直接調用最小費用最大流模板就好了 
129           updateFlow();
130        printf("%d\n", -maxFlow);
131    }
132    return 0;
133 }

?

轉載于:https://www.cnblogs.com/hujunzheng/p/3798997.html

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

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

相關文章

java把對象轉成圖片格式轉換器安卓版,java 萬能圖片格式轉換

話不多說&#xff0c;直接上代碼import java.awt.image.BufferedImage;import java.awt.image.Raster;import java.io.File;import java.io.IOException;import javax.imageio.ImageIO;public class IOUtil {public static void pgm2png(String src, String dest) throws IOExc…

hadooppythonsql_python - hadoop,mapreduce demo

Hadoop,mapreduce 介紹59888745qq.com大數據工程師是在Linux系統下搭建Hadoop生態系統(cloudera是最大的輸出者類似于Linux的紅帽)&#xff0c;把用戶的交易或行為信息通過HDFS(分布式文件系統)等存儲用戶數據文件&#xff0c;然后通過Hbase(類似于NoSQL)等存儲數據&#xff0c…

hdu 2896 病毒侵襲 ac自動機

1 /*2 hdu 2896 病毒侵襲 ac自動機 3 從題意得知&#xff0c;模式串中沒有重復的串出現&#xff0c;所以結構體中可以將last[]&#xff08;后綴鏈接&#xff09;數組去掉 4 last[]數組主要是記錄具有相同后綴模式串的末尾節點編號 。本題中主要是計算每一個模式串5 在主串中有沒…

axure原件 總是丟失_Axure實現提示文本單擊顯示后自動消失的效果

FORM一 .新增的input輸入屬性 1.email類型 在表單提交E-mail地址時,無效的輸入會生成很多無效數據,對后期的數據檢索造成一定的影響.所以在表單提交之前,需要對輸入的E-mail地址進行有效 ...Google的Protobuf協議分析protobuf和thrift類似,也是一個序列化的協議實現,簡稱PB(下文…

linux php不能寫文件內容,php 在linux系統下寫出文件問題

最近寫了一個簡單的生成文件&#xff0c;服務器用的linux 但是在將文件寫出到路徑的時候就會寫出一個其他的文件夾其中一些代碼如下define("paddy",dirname(__FILE__));$gkrequest_uri();$filepathpaddy.$gk&#xff1b;createfile($filefath,$file)&#xff1b;//$f…

python mysql刪除數據_python-mysql刪除和更新數據

刪除數據import codecsimport MySQLdbdef connect_mysql():db_config {host: 192.168.48.128,port: 3306,user: xiang,passwd: 123456,db: python,charset: utf8}cnx MySQLdb.connect(**db_config)return cnxif __name__ __main__:cnx connect_mysql()sql select * from S…

xlat指令...

1 ;就是一個串str1&#xff0c; lea ebx, str1 然后我們ebx1總是加上的是一個字節&#xff0c; 無論&#xff08;串是word&#xff0c; byte&#xff0c; dword&#xff09;2 .3863 .model flat4 .stack 40965 include io.h6 ExitProcess proto near32 stdcall, deExitCode:dwo…

php 串口通信例程,HAL庫串口通信例程

請問下 為什么要 用void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)這個函數呢?不用不行嗎&#xff1f;static void MX_USART1_UART_Init(void){huart1.Instance USART1;huart1.Init.BaudRate 9600;huart1.Init.WordLength UART_WORDLENGTH_8B;huart1.Init.Stop…

char 類型與lpcwstr_「lpctstr」char* 與 LPCTSTR 類型的互相轉換 - seo實驗室

lpctstr1.char* 轉換成 LPCTSTRchar ch[1024] "wo shi ni baba";int num MultiByteToWideChar(0,0,ch,-1,NULL,0);wchar_t *wide new wchar_t[num];MultiByteToWideChar(0,0,ch,-1,wide,num);解析&#xff1a;num 獲得長字節所需的空間MultiByteToWideChar()表示將…

poj 2195 Going Home

1 /*2 做網絡流的題建圖真的是太重要了&#xff01;3 本題是將人所在的位置和房子所在的位置建立邊的聯系&#xff0c;其中man到house這一條邊的流量為 1&#xff0c; 費用為兩者的距離4 而方向邊的流量為 0&#xff0c; 費用為正向邊的相反數&#xff08;也就是沿著反…

CardLayout布局練習(小的圖片瀏覽器)

1 /*2 涉及Panel中的圖片的加載&#xff0c;還有Frame的關閉的方法&#xff0c; CardLayout&#xff08;int hgap, int vgap&#xff09;就會決定卡片面板的大小3 匿名類的使用。。。4 */5 import java.awt.*;6 import java.awt.event.*;7 import javax.swing.*;8 public class…

python求逆矩陣的方法,Python 如何求矩陣的逆

我就廢話不多說了&#xff0c;大家還是直接看代碼吧~import numpy as npkernel np.array([1, 1, 1, 2]).reshape((2, 2))print(kernel)print(np.linalg.inv(kernel))注意&#xff0c;Singular matrix奇異矩陣不可求逆補充&#xff1a;pythonnumpy中矩陣的逆和偽逆的區別定義&a…

plsql存過聲明游標_plsql編程學習之游標一

oralce plsql編程的游標游標分類1顯示游標2隱式游標隱式游標&#xff0c;oracle自動管理&#xff0c;不用聲明&#xff0c;打開和關閉&#xff0c;ORACLE自動處理&#xff0c;使用隱式游標%FOUND時&#xff0c;需要加上 SQL%FOUND顯示游標&#xff0c;需要自己聲明&#xff0c;…

用命令行編譯java并生成可執行的jar包

用命令行編譯java并生成可執行的jar包 1.編寫源代碼。 編寫源文件&#xff1a;CardLayoutDemo.java并保存&#xff0c;例如&#xff1a;I:\myApp\CardLayoutDemo.java。程序結構如下&#xff1a;package test;import java.awt.*; import javax.swing.*; //更多包的導入...clas…

python計時器單位,python(計時器)

計時器要求&#xff1a;定制一個計時器的類start 和 stop方法代表啟動計時和停止計時假設計時器對象 t1&#xff0c;print(t1)和直接調用t1 均顯示結果當計時器未啟動或已停止計時&#xff0c;調用stop方法能給予溫馨提示兩個計時器對象可以相加&#xff1a; t1 t2只能使用提供…

查詢分析300萬筆記錄_給你100萬條數據的一張表,你將如何查詢優化?

1.兩種查詢引擎查詢速度(myIsam 引擎)InnoDB 中不保存表的具體行數&#xff0c;也就是說&#xff0c;執行select count(*) from table時&#xff0c;InnoDB要掃描一遍整個表來計算有多少行。MyISAM只要簡單的讀出保存好的行數即可。注意的是&#xff0c;當count(*)語句包含 whe…

poj 3321 Apple Trie

/*poj 3321 Apple Trie 這道題的關鍵是如何將一個樹建成一個一維數組利用樹狀數組來解題&#xff01;可以利用dfs&#xff08;&#xff09;來搞定&#xff0c;我們在對一個節點深搜后&#xff0c;所經過的節點的數目就是該節點的子樹的數目所以我們利用start[i]數組來記錄 i 節…

php美團項目分享,美團項目(純代碼)(示例代碼)

一.框架搭建1.icon規格要求可從文檔中查找,搜索app icon.2.因為很多界面重復利用,所以不用storyboarda.刪除stroyboard,在設置中Info -> Main storyboard file base name 項直接去除b.創建ZXHomeViewController(UICollectionViewController)和ZXNavigationController(UINavi…

ioc spring 上機案例_Spring的IoC入門案例

1、創建工程&#xff0c;導入坐標1.1 創建工程1.2 導入坐標xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">4.0.0org.examplespring_01_io…

java中父類與子類, 不同的兩個類中的因為構造函數由于遞歸調用導致棧溢出問題...

1 /*2 對于類中對成員變量的初始化和代碼塊中的代碼全部都挪到了構造函數中&#xff0c;3 并且是按照java源文件的初始化順序依次對成員變量進行初始化的&#xff0c;而原構造函數中的代碼則移到了構造函數的最后執行4 */5 import static java.lang.System.out;6 7 public clas…