[HZNOI #koishi] Magic

[HZNOI #514] Magic

題意

給定一個 \(n\) 個點 \(m\) 條邊的有向圖, 每個點有兩個權值 \(a_i\)\(b_i\), 可以以 \(b_i\) 的花費把第 \(i\) 個點的 \(a_i\) 變成 \(0\). 最后每個點 \(i\) 產生的花費為所有從 \(i\) 出發能通過一條有向邊直接到達的點 \(j\)\(a_j\)\(\max\). 最小化這個過程中的總花費.

\(n\le 1000,m\le50000\)

題解

一點都不套路的最小割.

果然我是不會網絡流的.

對于每個點, 如果將它的鄰接點按照 \(a_j\) 降序排序的話, 不難發現必然要干掉一個前綴的所有 \(a_j\) 才能讓這個點在最后統計的時候產生的花費變小. 但是多次干掉同一個點不能重復計算花費.

那么我們一點都不自然地想到最小割. 先把所有點拆成兩個, 一個負責計算最終統計時的花費 (A類點), 一個負責計算被干掉的時候產生的花費 (B類點). 被干掉的時候產生的花費直接連一條流量為 \(b_i\) 的邊到 \(t\) 就可以了. 最終統計時的花費先從 \(s\) 連一條 \(\infty\) 邊到當前點, 然后按照 \(a_j\) 降序拉出一條鏈來, 鏈上的每個點代表一條邊, 權值為這條邊到達的點的 \(a_j\). 然后再從鏈上的每個點連一條 \(\infty\) 邊到 \(j\) 對應的點. 這樣的話如果 \(s\verb|-|t\) 被割斷, 那么對于每一個 A 類點, 后面必然是割掉了某個 \(a_j\), 同時所有大于被割斷的 \(a_j\) 的邊鄰接的點必然都已經被割掉了 \(b_i\).

建圖Dinic就可以了.

這個拉鏈然后最小割的套路依然沒有學會...果然我還是太菜了QAQ...

什么你問我 \(n+m\) 個點Dinic怎么跑過去的? 我怎么知道?Dinic的運行速度大概都是靠信仰吧...

戀戀世界第一!

參考代碼

#include <bits/stdc++.h>const int MAXV=1e5+10;
const int MAXE=5e6+10;
const int INF=0x7FFFFFFF;struct Edge{int from;int to;int flow;Edge* rev;Edge* next;
};
Edge E[MAXE];
Edge* head[MAXV];
Edge* cur[MAXV];
Edge* top=E;int v;
int e;
int a[1010];
int b[1010];
int depth[MAXV];
std::vector<int> link[1010];bool BFS(int,int);
int Dinic(int,int);
int DFS(int,int,int);
void Insert(int,int,int);int main(){freopen("magic.in","r",stdin);freopen("magic.out","w",stdout);scanf("%d%d",&v,&e);for(int i=1;i<=v;i++)scanf("%d",a+i);for(int i=1;i<=v;i++)scanf("%d",b+i);for(int i=0;i<e;i++){int a,b;scanf("%d%d",&a,&b);link[a].push_back(b);}for(int i=1;i<=v;i++)std::sort(link[i].begin(),link[i].end(),[](int a,int b){return ::a[a]>::a[b];});int s=0,t=1,cnt=v*2+1;for(int i=1;i<=v;i++){Insert(s,i+1,INF);Insert(i+v+1,t,b[i]);int last=i+1;for(size_t j=0;j<link[i].size();j++){++cnt;Insert(cnt,v+link[i][j]+1,INF);Insert(last,cnt,a[link[i][j]]);last=cnt;}}printf("%d\n",Dinic(s,t));return 0;
}int Dinic(int s,int t){int ans=0;while(BFS(s,t))ans+=DFS(s,INF,t);return ans;
}bool BFS(int s,int t){memset(depth,0,sizeof(depth));std::queue<int> q;q.push(s);depth[s]=1;cur[s]=head[s];while(!q.empty()){s=q.front();q.pop();for(Edge* i=head[s];i!=NULL;i=i->next){if(i->flow>0&&depth[i->to]==0){depth[i->to]=depth[s]+1;cur[i->to]=head[i->to];if(i->to==t)return true;q.push(i->to);}}}return false;
}int DFS(int s,int flow,int t){if(s==t||flow<=0)return flow;int rest=flow;for(Edge*& i=cur[s];i!=NULL;i=i->next){if(i->flow>0&&depth[i->to]==depth[s]+1){int tmp=DFS(i->to,std::min(rest,i->flow),t);if(tmp<=0)depth[i->to]=0;rest-=tmp;i->flow-=tmp;i->rev->flow+=tmp;if(rest<=0)break;}}return flow-rest;
}inline void Insert(int from,int to,int flow){top->from=from;top->to=to;top->flow=flow;top->rev=top+1;top->next=head[from];head[from]=top++;top->from=to;top->to=from;top->flow=0;top->rev=top-1;top->next=head[to];head[to]=top++;
}

o_47079034_p0.png

轉載于:https://www.cnblogs.com/rvalue/p/10615423.html

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

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

相關文章

同步與異步

同步&#xff1a; 做完一件事&#xff0c;再做另一件 煮好水&#xff0c;再拆泡面包裝 異步&#xff1a; 可以同時做好幾個任務 燒水&#xff0c;打開火之后&#xff0c;先去拆泡面包裝&#xff0c;等水開了&#xff0c;再停下拆包裝&#xff0c;去關掉火。。。。。 轉載于:htt…

js(Dom+Bom)第一天(2)

webAPI 00-復習 內置對象中的方法 01-JavaScript組成 知識點-ECMASCRIPT 重點回顧 存儲容器 變量數組對象 邏輯語法 分支語句循環語句switch語句 知識點-BOM 概念 Browser Object Model (瀏覽器器對象模型) 操作瀏覽器將瀏覽器看做是一個對象.作用 通過js操作瀏覽器中相…

mysql 主主復制的配置流程

1、先關閉B&#xff0c;把A的數據導出來&#xff0c;mysqldump -hlocalhost -uroot -p123456 --database ibprpu >ibprpu.sql2、關閉A&#xff0c;啟動B&#xff0c;進入mysql建立一個新的數據庫 create database ibprpu3、導入數據庫 mysql -hlocalhost -uroot -p123456 &l…

華為架構師8年經驗談:從單體架構到微服務的服務化演進之路

本次分享的技術大綱如下&#xff1a; 傳統應用開發面臨的挑戰服務化實踐服務化不是銀彈服務化架構的演進方向一 、傳統應用開發面臨的挑戰 挑戰1-- 研發成本高 主要體現在如下幾個方面&#xff1a; 代碼重復率高在實際項目分工時&#xff0c;開發都是各自負責幾個功能&#xff…

輪播圖制作(1)

輪播圖制作 <body><div><img src"img/1.jpg" class"imgs" alt""><a href"#" class"left"><</a> //此處的箭頭也可以用圖標做出來<a href"#" class"right">>…

StringUtils工具類的常用方法

StringUtils 方法的操作對象是 java.lang.String 類型的對象&#xff0c;是 JDK 提供的 String 類型操作方法的補充&#xff0c;并且是 null 安全的(即如果輸入參數 String 為 null 則不會拋出 NullPointerException &#xff0c;而是做了相應處理&#xff0c;例如&#xff0c…

struts2+extjs文件上傳完整實現(攻克了上傳中的各種問題)

版權聲明&#xff1a;本文為博主原創文章。未經博主同意不得轉載。 https://blog.csdn.net/shanhuhau/article/details/28617999 首先須要引入上傳控件 <script type"text/javascript" src"<%basePath%>/js/ext/examples/ux/fileuploadfield/FileUploa…

放大鏡制作(1)

放大鏡制作 <div class"box" id"box"><!--左側的盒子--><div class"small"><!--圖片--><img src"images/big.jpg" width"350" class"aaa" alt""/><!--黃色小盒子--&…

.NET Framework 2.0 組件和非托管代碼與交互操作詳解(轉)

.NET Framework 將促進與 COM 組件、COM 服務、外部類型庫和許多操作系統服務的交互操作。在托管和非托管對象模型之間&#xff0c;數據類型、方法簽名和錯誤處理機制都存在差異。為了簡化 .NET Framework 組件和非托管代碼之間的互用并便于進行移植&#xff0c;公共語言運行時…

git 刪除遠程分支和本地分支

刪除遠程分支和本地分支 https://www.cnblogs.com/luosongchao/p/3408365.html 將遠程git倉庫里的指定分支拉取到本地&#xff08;本地不存在的分支&#xff09; https://www.cnblogs.com/hamsterPP/p/6810831.html 轉載于:https://www.cnblogs.com/mafeng/p/10619419.html

從零開始實現ASP.NET Core MVC的插件式開發(四) - 插件安裝

標題&#xff1a;從零開始實現ASP.NET Core MVC的插件式開發(四) - 插件安裝 作者&#xff1a;Lamond Lu 地址&#xff1a;https://www.cnblogs.com/lwqlun/p/11343141.html 源代碼&#xff1a;https://github.com/lamondlu/Mystique 前情回顧 從零開始實現ASP.NET Core MVC的插…

立體導航翻轉案例

<div class"box"><!-- 立方體 --><ul><li><img src"img1/1.jpg" alt""></li><li><img src"img1/2.jpg" alt""></li><li><img src"img1/3.jpg" a…

Uncontrolled memory mapping in camera driver (CVE-2013-2595)

版權聲明&#xff1a;本文為博主原創文章&#xff0c;未經博主同意不得轉載。https://blog.csdn.net/hu3167343/article/details/34434235 /* 本文章由 莫灰灰 編寫&#xff0c;轉載請注明出處。 作者&#xff1a;莫灰灰 郵箱&#xff1a; minzhenfei163.com */ 1漏洞描寫…

表格隔行變色

<body><table border"0" align"center" cellspacing"1" cellpadding"0"><caption>恭喜發財</caption><thead><tr><th>代碼</th><th>名稱</th><th>最新公布凈值<…

啟動Cognos時報0106錯誤

1. 問題描述 啟動Cognos失敗&#xff0c;報錯代碼為0106。 2. 問題分析 是jdk版本不兼容。 3. 解決方案 方案一&#xff1a;更換jdk1.6&#xff0c;可以使用免安裝版&#xff0c;不需要卸載原有的jdk將java_home的路徑替換成jdk1.6的路徑。 方案二&#xff1a;使用Cognos自帶jd…

項目管理的測試版發布

最近有時間將以前沒有寫完的項目管理程序進一步完善&#xff0c;加入了項目任務之間的關連。功能&#xff1a;1、任務的關連Start to finishStart to startFinish to startFinish to finish2、任務關連表環路檢測3、采用MVC模式進行開發4、自動導出XML5、雙擊連接線可以設置、刪…

劍指offer.機器人的運動范圍

地上有一個 m 行和 n 列的方格&#xff0c;橫縱坐標范圍分別是 0~m?1 和 0~~n?1。一個機器人從坐標0,0的格子開始移動&#xff0c;每一次只能向左&#xff0c;右&#xff0c;上&#xff0c;下四個方向移動一格。但是不能進入行坐標和列坐標的數位之和大于 kk 的格子。請問…

Tab欄切換布局分析

<body><div class"tab"><div class"tab_list"><ul><li class"current">商品介紹</li><li>規格與包裝</li><li>售后包裝</li><li>商品評價(50000)</li><li>手機社…

CLR基礎,CLR運行過程,使用dos命令創建、編譯、運行C#文件,查看IL代碼

CLR是Common Language Runtime的縮寫&#xff0c;是.NET程序集或可執行程序運行的一個虛擬環境。CLR用于管理托管代碼&#xff0c;但是它本身是由非托管代碼編寫的&#xff0c;并不是一個包含了托管代碼的程序集&#xff0c;所以不能使用IL DASM進行查看&#xff0c;但CLR以dll…

表單的全選取消全選

<div class"wrap"><table border"1" cellspacing"0" cellpadding"0"><caption>恭喜發財</caption><thead><tr><th><input type"checkbox" id"j_cbAll" checked&quo…