最大權閉合圖hdu3996

定義:最大權閉合圖:是有向圖的一個點集,且該點集的所有出邊都指向該集合。即閉合圖內任意點的集合也在改閉合圖內,給每個點分配一個點權值Pu,最大權閉合圖就是使閉合圖的點權之和最大。


最小割建邊方式:源點s和正權的點連接,容量是Pu,負權的點和匯點t相連,容量是-Pu,之間的邊權值inf,過一遍最大流ans,正權之和sum-ans就是最大權閉合圖的值。

例題:HDU3996

題意:給出n個金礦地區,每個金礦地區有mi個礦坑,挖取第i個地區的第j個礦坑需要花費cost[i][j],可以獲得利益value[i][j],但是有些限制條件,就是想要挖取第i個地區的第j個礦坑之前必須把第ii個地區的第jj個礦坑挖掉.問最大獲益是多少?

分析:共用n*Mi個礦坑,每個點的權值是value[i][j]-cost[i][j],建邊從第i,j指向ii,jj,表示要選取i,j一定會選取ii,jj。建邊后跑一遍Dinic即可。

#include"stdio.h"
#include"string.h"
#include"stdlib.h"
#include"algorithm"
#include"math.h"
#include"vector"
#include"queue"
#define M 3009
#define inf 1000000000000000LL
#define eps 1e-7
#define pps 1e-18
#define PI acos(-1.0)
#define LL __int64
using namespace std;
struct node
{int u,v,next;LL w;
}edge[M*300];
int t,head[M],dis[M];
int lay[M],num[111][30],work[M];
LL p[M],cost[M];
LL min(LL a,LL b)
{return a<b?a:b;
}
void init()
{t=0;memset(head,-1,sizeof(head));
}
void add(int u,int v,LL w)
{edge[t].u=u;edge[t].v=v;edge[t].w=w;edge[t].next=head[u];head[u]=t++;edge[t].u=v;edge[t].v=u;edge[t].w=0;edge[t].next=head[v];head[v]=t++;
}
int bfs(int S,int T)
{queue<int>q;memset(dis,-1,sizeof(dis));q.push(S);dis[S]=0;while(!q.empty()){int u=q.front();q.pop();for(int i=head[u];i!=-1;i=edge[i].next){int v=edge[i].v;if(edge[i].w&&dis[v]==-1){dis[v]=dis[u]+1;if(v==T)return 1;q.push(v);}}}return 0;
}
LL dfs(int cur,LL a,int T)
{if(cur==T)return a;for(int &i=work[cur];~i;i=edge[i].next){int v=edge[i].v;if(edge[i].w&&dis[v]==dis[cur]+1){LL tt=dfs(v,min(a,edge[i].w),T);if(tt){edge[i].w-=tt;edge[i^1].w+=tt;return tt;}}}return 0;
}
LL Dinic(int S,int T)
{LL ans=0;while(bfs(S,T)){memcpy(work,head,sizeof(head));while(LL tt=dfs(S,inf,T))ans+=tt;}return ans;
}
struct st
{int u,v;st(int uu,int vv){u=uu;v=vv;}
};
vector<st>s[M];
int main()
{int Case,n,i,j,k,K,ii,jj,kk=1;scanf("%d",&Case);while(Case--){scanf("%d",&n);for(i=1;i<M;i++)s[i].clear();int cnt=0;init();for(i=1;i<=n;i++){scanf("%d",&lay[i]);for(j=1;j<=lay[i];j++){num[i][j]=++cnt;scanf("%I64d%I64d%d",&cost[cnt],&p[cnt],&K);for(k=1;k<=K;k++){scanf("%d%d",&ii,&jj);s[cnt].push_back(st(ii,jj));}}}init();for(i=1;i<=n;i++){for(j=1;j<=lay[i];j++){for(k=0;k<(int)s[num[i][j]].size();k++){int ii=s[num[i][j]][k].u;int jj=s[num[i][j]][k].v;add(num[i][j],num[ii][jj],inf);}}}LL sum=0;for(i=1;i<=cnt;i++){if(p[i]-cost[i]>0){add(0,i,p[i]-cost[i]);sum+=p[i]-cost[i];}else if(p[i]-cost[i]<0)add(i,cnt+1,cost[i]-p[i]);}LL ans=Dinic(0,cnt+1);printf("Case #%d: ",kk++);printf("%d\n",sum-ans);}return 0;
}


轉載于:https://www.cnblogs.com/mypsq/p/4348097.html

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

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

相關文章

非監督學習的單層網絡分析

這篇博客對應的是Andrew.Ng的那篇文章&#xff1a;An Analysis o f Single-Layer Networks in Unsupervised Feature Learning&#xff0c;文章的主要目的是討論receptive field size&#xff0c;number of hidden nodes&#xff0c; step-stride以及whitening在對卷積網絡模型…

Spring MVC 驗證碼

頁面 <% page language"java" import"java.util.*" pageEncoding"UTF-8"%> <% String path request.getContextPath(); String basePath request.getScheme()"://"request.getServerName()":"request.getServerP…

數據結構實驗之鏈表四:有序鏈表的歸并

數據結構實驗之鏈表四&#xff1a;有序鏈表的歸并 Time Limit: 1000MS Memory limit: 65536K 題目描述 分別輸入兩個有序的整數序列&#xff08;分別包含M和N個數據&#xff09;&#xff0c;建立兩個有序的單鏈表&#xff0c;將這兩個有序單鏈表合并成為一個大的有序單鏈表&…

apk文件編譯到系統文件中的方法(及包含so庫的)

把第三方或自己開發的apk文件編譯到系統文件(system.img)中的方法&#xff1a; 1 (1)源碼編譯后&#xff0c;把apk拷貝到out\target\product\generic\system\app中。 (2) 執行命令make snod , 把添加的spk編到system.img 中 缺點&#xff1a;執行make clean 后&#xff0c;再…

javascript中interval與setTimeOut的區別

setTimeout(code,millisec) //- 在指定時間后執行代碼 code必須&#xff1b; millisec必須&#xff1b; clearTimeout(setTimeoutId) //- 取消 setTimeout() setInterval(code,millisec)&#xff1b;//指定間隔毫秒內循環執行代碼 code必須&#xff1b; millisec必須&a…

java設計模式之單例模式(七種方法)

單例模式&#xff1a;個人認為這個是最簡單的一種設計模式&#xff0c;而且也是在我們開發中最常用的一個設計模式。 單例模式的意思就是只有一個實例。單例模式確保某一個類只有一個實例&#xff0c;而且自行實例化并向整個系統提供這個實例。這個類稱為單例類。我們前面學習的…

java 遍歷map集合

Map<String, String> map new HashMap<String, String>(); map.put("key1", "value1"); map.put("key2", "value2"); map.put("key3", "value3"); //第一種&#xff1a;通過Map.keySet遍…

poj3009 Curling 2.0 深搜

PS&#xff1a;以前看到題目這么長就沒寫下去了。今天做了半天&#xff0c;沒做出來。準備看題解&#xff0c;打開了網站都忍住了&#xff0c;最后還是靠自己做出來的。算是一點進步吧。 分析&#xff1a; 題目的意思沒明白或者理解有偏差都沒辦法做題。看樣例3和樣例4&#xf…

Android監聽事件

ListView事件監聽&#xff1a; setOnItemSelectedListener 鼠標滾動時觸發 setOnItemClickListener 點擊時觸發 EditText事件監聽&#xff1a; setOnKeyListener 獲取焦點時觸發 RadioGroup事件監聽&#xff1a; setOnCheckedChangeListener 點擊時觸發 CheckBox事件監聽&#…

子類能不能繼承父類的構造方法?

class A{ public A(){} // 1:無參數構造方法。 public A(String s){} // 2.}class B extends A{ public B(String s){ super(s); // 3. }}說明&#xff1a;如果沒有1處的無參數構造方法&#xff0c;那么3處一定要主動調用父類帶參數的構造方法。如果有1處的構造方法&#…

基于原生javascript的ajax實現

function getXMLHttpRequest(){if(window.ActiveXObject){//用戶是ie瀏覽器http_requestnew ActiveXObject("Microsoft.XMLHTTP");}else{//其他的瀏覽器http_requestnew XMLHttpRequest();}return http_request;}var httpRequest;function name(){httpRequestgetXMLH…

Google File System設計方面的問題匯總

1、Google File System概述 google file system是一個分布式文件系統&#xff0c;針對的是數據密集型應用&#xff0c;提供容錯功能&#xff0c;運行在低廉的服務器上&#xff0c;同時給大量的用戶提供高性能服務。盡管google file system有著傳統的分布式文件系統的目標&#…

linux phpize

phpize是什么 1、phpize是用來擴展php擴展模塊的&#xff0c;通過phpize可以建立php的外掛模塊。 當php編譯完后&#xff0c;在bin下面會有phpize這個腳本文件&#xff0c; 在編譯你要添加的擴展模塊之前&#xff0c;執行以下phpize就可以了&#xff1b; 比如現在想在php中加入…

一些常用的正則表達式

較驗郵箱&#xff1a; var EmailReg /^[-_A-Za-z0-9]([_A-Za-z0-9]\.)[A-Za-z0-9]{2,3}$/; 身份證號碼&#xff1a; var reg /(^\d{15}$)|(^\d{17}(\d|X)$)/; 15位身份證號 //身份證15位時&#xff0c;次序為省&#xff08;3位&#xff09;市&#xff08;3位&#xff…

iOS iphone屏幕分析(豈止而大)

在寫本文前&#xff0c;我必須介紹幾點內容&#xff1a;第一點&#xff1a;屏幕上面顯示的內容多少和屏幕的尺寸大小無關第二點&#xff1a;屏幕上面顯示的內容多少和分辨率完全無關第三點&#xff1a;屏幕上面顯示的內容多少和屏幕尺寸、屏幕分辨率、PPI等都是無關的那到底什么…

js的一些實現

響應回車鍵提交表單 //*******************************************************響應回車鍵登錄****************************************************************** document.οnkeydοwnfunction(event){ var e event || window.event || arguments…

【隨筆】Win7下GVIM的安裝與配置

針對各種語言的編輯器千千萬萬&#xff0c;最好的就是最適合自己的&#xff0c;這句話一點沒錯。 偶然間&#xff0c;需要在Windows上編寫代碼&#xff0c;MyEclipse等太大&#xff0c;完全沒有必要&#xff0c;所以就想起來了vim這個神器。個子小&#xff0c;功能強&#xff0…

java遍歷Set集合

在Java中使用Set,可以方便地將需要的類型&#xff0c;以集合類型保存在一個變量中.主要應用在顯示列表. Set是一個不包含重復元素的collection。更確切地講&#xff0c;set 不包含滿足 e1.equals(e2) 的元素對 e1 和 e2&#xff0c;并且最多包含一個 null 元素。 import java.u…

Java switch語句

在Java7之前&#xff0c;switch只能支持 byte、short、char、int或者其對應的封裝類以及Enum類型。 Java7可以使用String作為判斷條件 public class Test { public void test(String str) { switch(str) { case "abc": …

find之exec和args

本來以為以前的差不多夠用了。呵呵&#xff0c;看到很多高手用高技巧&#xff0c;心癢癢的覺得我自己還可以提升啊。。哈哈哈。 這個實踐起來之后&#xff0c;&#xff0c;SED,AWK也得深化一下&#xff0c;&#xff0c;&#xff0c;SHELL和PYTHON&#xff0c;作運維的兩樣都不能…