洛谷1361 小M的作物(最小割)

2022-03-19 22:38:31 字數 793 閱讀 1735

洛谷

這是乙個比較實用的套路,很多題目都有用,而且這個套路難以口胡出來。

考慮把每乙個附加貢獻重新建乙個點,然後向必需的點連邊,流量為val。

然後直接種植的從源點向這個點連,流量為val。

最後跑乙個最小割就可以了。

#includeusing namespace std;

const int n=500010,inf=1e9+10;

int front[n],cnt,s,t,n;

struct node

e[1500010];

queueq;

int dep[n];

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

;front[u]=cnt++;

e[cnt]=(node);front[v]=cnt++;

}bool bfs()

}

} return dep[t];

}int dfs(int u,int flow)

else dep[v]=0;

} }return 0;

}int dinic()

return flow;

}int m;

int main()

for(int i=1;i<=n;i++)

scanf("%d",&m);

while(m--)

++tot;

} printf("%d\n",sum-dinic());

return 0;

}

洛谷1361 小M的作物(最小割)

第一眼看有a,b兩個以為是二分圖,根據題目各種想辦法建邊,感覺還是弄不成。推了好久才發現求的就是乙個最小割。首先如果令m 0,那麼可以建這樣乙個圖 當然貪心就可以了,最後選擇的方案也一定是取ai和bi中的較大值,算出來也正是這張圖的最小割,也是 最大流。那如果m不為0呢?我們舉乙個有兩個點的例子 a...

洛谷P1361 小M的作物 最小割建模

題目大意 有n株植物,a,b兩塊田地,每株植物i,種在a田,可以獲得a i 的收益,種在b田,可以獲得b i 的收益。此外還存在m種額外收益,其中第i中額外收益可以這樣描述 如果集合u i 中的所有植物全部種在a田,那麼可以獲得exa i 的額外收益,如果集合u i 中的所有植物全部種在b田,那麼可...

洛谷 P1361 小M的作物 最大流最小割

題目大意 給出 n 個植物,每個植物種在 a 農場的收益是 a i 種在 b 農場的收益是 b i 再給出 m 組關係,每組中的所有植物如果都在 a 農場的話額外收益為 c1 如果同時在 b 農場的話額外收益為 c2,問如何種植可以使得收益最大 題目分析 每種植物的兩種選擇可以視為兩個集合,對於選擇...