BZOJ 1497 NOI2006 最大獲利

2022-05-20 21:42:01 字數 1149 閱讀 8630

【鏈結】

我是鏈結,點我呀:)

【題意】

在這裡輸入題意

【題解】

最大權閉合子圖的模板題。

每個人對兩個物品有依賴。

則相當於m+n個點

這m個點是m個使用者。

每個使用者的權值是正的,為這個使用者獲得的利益。

然後每個基站對應n個點。這n個點上的權值都是負數的。

表示代價。

然後就是最大權閉合子圖問題了。

套乙個網路流模型

源點s和每個人連流量為利益的邊。

每個基站和匯點t連流量為代價的絕對值的邊。

使用者和基站對應的邊。流量改為正無窮。

這樣這個網路的每個割(s,t)中 集合s除去匯點s剩下的點。

就是原圖的乙個閉合子圖了。

(而且會發現每個閉合子圖都能由乙個割,一一對應

分析一下會發現當求得最小割的時候。

得到的閉合子圖權值是最大的。

而且這個閉合子圖的權值就是所有正權的權值和減去最小割。

參考 胡伯濤 《最小割模型在資訊學競賽中的應用》

【**】

#includeusing namespace std;

const int n = 5000;

const int m = 50000;

const int inf = 100*5000+50000*100 + 10;

const int s = 0;

struct nodeedge[(m*3+n+100)*2];

int n,m,w[n+10],head[n+m+100],cur[n+m+100],k,d[n+m+100],t;

int q[n+m+100];

void addedge(int u,int v,int w)

int bfs()}}

return 0;

}int dfs(int u, int maxflow)

}return ret;

}int dicnic()

return ans;

}int main()

for (int i = 1;i <= n;i++) addedge(m+i,m+n+1,w[i]);

cout

}

BZOJ1497 NOI2006 最大獲利

什麼是最大權閉合子圖 先解釋一下有向圖的閉合圖 閉合圖內任意點的任意後繼也一定還在閉合圖中。物理意義 事物間依賴關係 乙個事件要發生,它需要的所有前提也都一定要發生。最大權閉合圖 點權之和最大的閉合圖 最大權閉合圖構圖方法 1.增加源s匯t 2.源s連線原圖的正權點,容量為相應點權 3.原圖的負權點...

bzoj 1497 NOI2006最大獲利

我對題意的理解 給出一堆公司和一堆使用者,我們買公司需要花錢,每個使用者會支付報酬當且僅當他所鍾愛的兩個公司我都買了,問最大獲利 最大權閉合子圖 好厲害的樣子 首先我們連邊最小割ans 答案就是sum ans 這個可以想,sum表示在不需要支出的情況下的獲利,現在我們需要支出,所以要跑一遍最小割。感...

bzoj1497 NOI2006 最大收益

最小割 思路比較簡單 點數看起來很多但是因為是類似二分圖的東西所以跑的比較快 源點對每個使用者連容量為收益的邊 使用者向中轉站連容量無窮大的邊 中轉站向匯點連容量為成本的邊 要麼割掉使用者帶來的收益 要麼割掉成本 include include include using namespace std...