BZOJ 1937: [Shoi2004]Mst 最小生成樹 [二分圖最大權匹配]

傳送門

題意:

給一張無向圖和一棵生成樹,改變一些邊的權值使生成樹為最小生成樹,代價為改變權值和的絕對值,求最小代價


?

線性規劃的形式:

$Min\quad \sum\limits_{i=1}^{m} \delta_i$

$Sat\quad $非樹邊邊權$\ge$生成樹上路徑任何一條邊的邊權

$i$非樹邊$j$樹邊

$w_i+\delta_i \ge w_j-\delta_j$

然后可以轉化成二分圖最小頂標和來求解

?

這里需要求二分圖最大權非完美匹配,我的做法是遇到$d[t] < 0$就退出,反正這道題過了

?

然后很高興的$1A$了就去看金剛狼3了好感動 現在補題解...

?

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
typedef long long ll;
const int N=1005,M=2e5+5,INF=1e9;
inline int read(){char c=getchar();int x=0,f=1;while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}return x*f;
}int n,m,s,t,g[55][55],u,v,id[55][55],num;
struct data{int u,v,w;}a[M];int q[N],p;
struct Graph{struct edge{int v,ne;}e[M];int cnt,h[N];inline void ins(int u,int v){cnt++;e[cnt].v=v;e[cnt].ne=h[u];h[u]=cnt;cnt++;e[cnt].v=u;e[cnt].ne=h[v];h[v]=cnt;}bool dfs(int u,int fa,int tar){if(u==tar) return true;for(int i=h[u];i;i=e[i].ne)if(e[i].v!=fa){q[++p]=id[u][e[i].v];if(dfs(e[i].v,u,tar)) return true;p--;}return false;}
}G;struct Edge{int v,ne,w,c,f;Edge(){}Edge(int v,int w,int c,int f):v(v),w(w),c(c),f(f){}
}e[M];
int cnt,h[N];
inline void ins(int u,int v,int w,int c){//printf("ins %d %d    %d    %d\n",u,v,w,c);cnt++;e[cnt]=Edge(v,w,c,0);e[cnt].ne=h[u];h[u]=cnt;cnt++;e[cnt]=Edge(u,-w,0,0);e[cnt].ne=h[v];h[v]=cnt;
}void build(){s=0;t=m+1;for(int i=1;i<n;i++) ins(s,i,0,1);for(int i=n;i<=m;i++) ins(i,t,0,1);for(int i=n;i<=m;i++){p=0;G.dfs(a[i].u,0,a[i].v);//printf("now %d\n",i);//for(int j=1;j<=p;j++) printf("%d ",q[j]);puts("");for(int j=1;j<=p;j++) ins(q[j],i,a[q[j]].w-a[i].w,1);}
}int d[N],head,tail,inq[N],pre[N],pos[N];
inline void lop(int &x){if(x==N)x=1;}
bool spfa(){//memset(d,127,sizeof(d));for(int i=s;i<=t;i++) d[i]=-INF,inq[i]=0;//memset(inq,0,sizeof(inq));head=tail=1;d[s]=0;inq[s]=1;q[tail++]=s;pre[t]=-1;while(head!=tail){int u=q[head++];inq[u]=0;lop(head);for(int i=h[u];i;i=e[i].ne){int v=e[i].v,w=e[i].w;if(d[v]<d[u]+w&&e[i].c>e[i].f){d[v]=d[u]+w;pre[v]=u;pos[v]=i;if(!inq[v])q[tail++]=v,inq[v]=1,lop(tail); }}}return pre[t]!=-1;
}
int mcmf(){int flow=0,cost=0;while(spfa()){int f=INF;for(int i=t;i!=s;i=pre[i]) f=min(f,e[pos[i]].c-e[pos[i]].f);flow+=f; if(d[t]<0) break;cost+=d[t]*f;//printf("%d %d %d\n",f,d[t],cost);for(int i=t;i!=s;i=pre[i]){e[pos[i]].f+=f;e[((pos[i]-1)^1)+1].f-=f;}}return cost;
}int main(){freopen("in","r",stdin);n=read();m=read(); for(int i=1;i<=m;i++) u=read(),v=read(),g[u][v]=g[v][u]=read();for(int i=1;i<n;i++) u=read(),v=read(),id[u][v]=id[v][u]=++num,a[num]=(data){u,v,g[u][v]},G.ins(u,v);for(int i=1;i<=n;i++)for(int j=i+1;j<=n;j++) if(g[i][j]&&!id[i][j]) id[i][j]=id[j][i]=++num,a[num]=(data){i,j,g[i][j]};//printf("lo %d %d %d\n",i,j,num);
build();printf("%d\n",mcmf());
}

?

轉載于:https://www.cnblogs.com/candy99/p/6536591.html

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

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

相關文章

找bug

1.在輸入數據按保存鍵后不知道數據是否已經存入數據庫。 修改&#xff1a;增加一個對數據庫的監聽事件來監聽數據庫是否發生變化。 2.空數據也能保存成功。 修改&#xff1a;增加一個監聽事件來檢測是否輸入數據。 3.在輸入框中輸入不否和輸入框對數據的要求&#xff0c;但不提…

HALCON示例程序forest.hdev識別森林中的樹

HALCON示例程序forest.hdev識別森林中的樹 示例程序源碼&#xff08;加注釋&#xff09; 關于顯示類函數解釋 dev_close_window () dev_update_window (‘off’) read_image (Forest, ‘forest_air1’) get_image_size (Forest, Width, Height) dev_open_window (0, 0, Width…

Hadoop學習之路(十八)MapReduce框架Combiner分區

對combiner的理解 combiner其實屬于優化方案&#xff0c;由于帶寬限制&#xff0c;應該盡量map和reduce之間的數據傳輸數量。它在Map端把同一個key的鍵值對合并在一起并計算&#xff0c;計算規則與reduce一致&#xff0c;所以combiner也可以看作特殊的Reducer。 執行combiner操…

cocos2dx游戲--歡歡英雄傳說--添加攻擊按鈕

接下來添加攻擊按鈕用于執行攻擊動作。同時修復了上一版移動時的bug。修復后的Player::walkTo()函數&#xff1a; void Player::walkTo(Vec2 dest) {if (_seq)this->stopAction(_seq);auto curPos this->getPosition();if (curPos.x > dest.x)this->setFlippedX(t…

Yii2.0 rules常用驗證規則

設置一個修改方法&#xff0c;但是save&#xff08;&#xff09;&#xff0c;沒有成功&#xff0c;數據修改失敗&#xff0c;查了好久&#xff0c;一般情況就是不符合rules規則&#xff0c;而我沒有設置rules規則&#xff0c;重新設置了一個不能為空&#xff0c;然后就修改成功…

HALCON示例程序gray_features.hdev提取灰度圖的不同特征(area_center_gray 、elliptic_axis_gray)

HALCON示例程序gray_features.hdev提取灰度圖的不同特征&#xff08;area_center_gray 、elliptic_axis_gray&#xff09; 示例程序源碼&#xff08;加注釋&#xff09; 讀入圖片 read_image (Image, ‘monkey’)二值化 threshold (Image, Region, 128, 255)分割連通域 conne…

Machine Vision Pixel Calibration~ ~ ~ ~ ~ ~ ~ ~ ~ ~

Artificial Intelligence and Robotics Research人工智能與機器人研究, 2014, 3, 25-33Published Online May 2014 in Hans. http://www.hanspub.org/journal/airrhttp://dx.doi.org/10.12677/airr.2014.32005

Ceph分布式存儲系統-性能測試與優化

測試環境 部署方案&#xff1a;整個Ceph Cluster使用4臺ECS&#xff0c;均在同一VPC中&#xff0c;結構如圖&#xff1a; 以下是 Ceph 的測試環境&#xff0c;說明如下&#xff1a; Ceph 采用 10.2.10 版本&#xff0c;安裝于 CentOS 7.4 版本中&#xff1b;系統為初始安裝&…

mysql考試總結

USE school; -- 班級表 CREATE TABLE class(cid TINYINT PRIMARY KEY AUTO_INCREMENT,caption VARCHAR(20) );INSERT INTO class(caption) VALUES("三年二班"),("一年三班"),("三年一班");SELECT * FROM class;-- 老師表 CREATE TABLE teacher(t…

反思

1.說明一下ArrayList和數組的區別&#xff0c;并且分別寫出初始化的語句&#xff1a; ArrayList:可以放不同的類型&#xff0c;長度不固定 數組&#xff1a;放同一類型&#xff0c;長度固定 數組的初始化語句&#xff1a;int []anew int []{}; ArrayList初始化語句&#xff1a;…

HALCON示例程序high.hdev使用不同方法提取區域

HALCON示例程序high.hdev使用不同方法提取區域 示例程序源碼&#xff08;加注釋&#xff09; 關于顯示類函數解釋 dev_close_window () read_image (Mreut, ‘mreut_y’) get_image_size (Mreut, Width, Height) dev_open_window (0, 0, Width, Height, ‘black’, WindowHan…

閱讀好書依然是提升自己的高效方法:兼以作者的身份告訴大家如何選擇書,以及高效學習的方法...

國內技術網站多如牛毛&#xff0c;質量高的網站也不少&#xff0c;博客園也算一個&#xff0c;各類文章數以百萬計&#xff0c;我隨便輸入一個關鍵字&#xff0c;比如Spring Cloud&#xff0c;都能看到大量的技術文章和教學視頻&#xff0c;我無意貶低技術文章和教學視頻的作用…

TCP/IP 協議簇的逐層封裝

在使用 TCP 協議的網絡程序中&#xff0c;用戶數據從產生到從網卡發出去一般要經過如下的逐層封裝過程&#xff1a; 從下往上看&#xff1a; 1&#xff09;鏈路層通過加固定長度的首部、尾部來封裝 IP 數據報(Datagram) 產生以太網幀(Frame)。 其中首部存在對封裝數據的…

【開源程序(C++)】獲取bing圖片并自動設置為電腦桌面背景

眾所周知&#xff0c;bing搜索網站首頁每日會更新一張圖片&#xff0c;張張漂亮&#xff08;額&#xff0c;也有一些不合我口味的&#xff09;&#xff0c;特別適合用來做電腦壁紙。 我們想要將bing網站背景圖片設置為電腦桌面背景的通常做法是&#xff1a; 上網&#xff0c;搜…

UIProgressView 圓角

里面外面都變成圓角 不用圖片 直接改變layer 重點是里面外面都是圓角哦 for (UIImageView * imageview in self.progress.subviews) { imageview.layer.cornerRadius 5; imageview.clipsToBounds YES; } 轉載于:https://www.cnblogs.com/huoran1120/p/5563991.html

HALCON示例程序holes.hdev孔洞提取

HALCON示例程序holes.hdev孔洞提取 示例程序源碼&#xff08;加注釋&#xff09; 關于顯示類函數解釋 read_image (Image, ‘progres’) get_image_size (Image, Width, Height) dev_close_window () dev_open_window (0, 0, Width, Height, ‘white’, WindowID) dev_set_co…

給實例動態增加方法VS給類動態增加方法

一、給實例綁定方法 object.method MethodType(method,object) >>>class Badbrains(): pass >>>def mocking(self): print(Brain\s Mocking) >>>b Badbrains() >>>from types import MethodType >>>b.mocking MethodType(moc…

一句DOS命令搞定文件合并

用Dos的copy命令實現&#xff1a; copy a.jsb.jsc.js abc.js /b 將 a.js b.js c.js 合并為一個 abc.js&#xff0c;最后的 /b 表示文件為二進位文件&#xff0c;copy 命令的其它參數可以在 cmd 里輸入 copy /? 學習 舉例&#xff1a;如果想要合并多個js文件到某個目錄下&#…

DataTables warning: Requested unknown parameter '0' from the data source for row '0'

問題&#xff1a;DataTables warning: Requested unknown parameter 0 from the data source for row 0 代碼&#xff1a; <script type"text/javascript">var data [{"Name":"UpdateBootProfile","Result":"PASS",&…

HALCON示例程序hull.hdev區域提取與凸度篩選

HALCON示例程序hull.hdev區域提取與凸度篩選 示例程序源碼&#xff08;加注釋&#xff09; 關于顯示類函數解釋 read_image (Hull, ‘hull’) get_image_size (Hull, Width, Height) dev_close_window () dev_open_window (0, 0, Width, Height, ‘black’, WindowID) dev_di…