bzoj1497: [NOI2006]最大獲利(網路流)
題目傳送門
真的皮。
解法:
這道題不會啊。
%了題解都說是最大權閉合子圖。
最大權閉合子圖的方法。
st向正權點(可以賺錢的)連容量為利益的邊。
負權點(要花錢的)向ed連容量為花的錢的邊。
圖中的邊(對應的利益和花費)連容量為無限大的邊。
答案為總利益-最大流
為什麼?
花了好久來想:
如果一條路徑上面流過的流量是等於他的花費的。
說明他的利益是大於花費的,那麼賺錢肯定要選。
所以總利益-最大流肯定包括了這個利益。
如果一條路徑上面流過的流量是等於他的利益的。
也就是說他的利益小於花費的,那麼肯定不選啦。
所以總利益-最大流就表示了不選這個東西。
強啊。
程式碼實現:
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
using namespace std;
struct node {
int x,y,c,next,other;
}a[1100000];int len,last[110000];
void ins(int x,int y,int c) {
int k1,k2;
len++;k1=len;
a[len].x=x;a[len].y=y;a[len].c=c;
a[len].next=last[x];last[x]=len;
len++;k2=len;
a[len].x=y;a[len].y=x;a[len].c=0;
a[len].next=last[y];last[y]=len;
a[k1].other=k2;a[k2].other=k1;
}
int head,tail,list[110000],h[110000],st,ed;
bool bfs() {
memset(h,0,sizeof(h));h[st]=1;
head=1;tail=2;list[1]=st;
while(head!=tail) {
int x=list[head];
for(int k=last[x];k;k=a[k].next) {
int y=a[k].y;
if(h[y]==0&&a[k].c>0) {
h[y]=h[x]+1;
list[tail++]=y;
}
}
head++;
}
if(h[ed]==0)
return false;
return true;
}
int findflow(int x,int f){
if(x==ed)
return f;
int s=0,t;
for(int k=last[x];k;k=a[k].next) {
int y=a[k].y;
if(h[y]==h[x]+1&&a[k].c>0&&s<f) {
t=findflow(y,min(a[k].c,f-s));
s+=t;a[k].c-=t;a[a[k].other].c+=t;
}
}
if(s==0)
h[x]=0;
return s;
}
int main() {
int n,m;scanf("%d%d",&n,&m);
st=n+m+1;ed=st+1;
for(int i=1;i<=n;i++) {
int x;scanf("%d",&x);
ins(i,ed,x); //負權點向ed連邊容量為花費。
}
int sum=0;
for(int i=1;i<=m;i++) {
int x,y,c;scanf("%d%d%d",&x,&y,&c);
ins(i+n,x,999999999); //原圖對應邊
ins(i+n,y,999999999); //原圖對應邊
ins(st,i+n,c); //st向正權點連邊容量為利益
sum+=c;
}
int ans=0;
while(bfs()==true)
ans+=findflow(st,999999999);
printf("%d\n",sum-ans);
return 0;
}
相關文章
- 網路流最大流
- 【模板】網路流最大流
- 網路流(最大流,最小割)
- 【網路流】有源匯上下界最大流
- 網路流最大流、最小割學習筆記筆記
- [網路流24題] 魔術球問題 (最大流)
- POJ1273 Drainage Ditches【網路流 最大流】AI
- 【網路流】網路流基本概念
- 網路流
- (通俗易懂小白入門)網路流最大流——EK演算法演算法
- 網路流初步
- 淺談網路最大流
- hdu 4292 網路最大流
- 網路流經典模型之一:最大權閉合子圖(壽司餐廳)模型
- 關於網路流
- 圖論——網路流圖論
- 網路流總結
- 網路流相關
- 網路流-最小割
- 上下界網路流
- 網路最大流演算法演算法
- 網路流大雜燴
- 網路流概念補充
- 網路流&費用流&二分圖
- 網路中最小費用最大流
- 網路最大流 Dinic演算法演算法
- 熊貓燒香背後的牟利網路:1年可獲利數千萬元
- 網路流練習筆記筆記
- 【學習筆記】網路流筆記
- 圖的匹配與網路流
- 【筆記/模板】網路流初步筆記
- 網路流學習筆記筆記
- "網路水軍"團伙被查 勾結網站內部人員獲利2000萬網站
- poj1087 網路最大流
- 【自用】有上下界的網路流
- 網路流複雜度證明複雜度
- Contest5400 - 網路流-1
- 阿里市值超騰訊 成亞洲最大網際網路公司阿里