洛谷
這是乙個比較實用的套路,很多題目都有用,而且這個套路難以口胡出來。
考慮把每乙個附加貢獻重新建乙個點,然後向必需的點連邊,流量為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,問如何種植可以使得收益最大 題目分析 每種植物的兩種選擇可以視為兩個集合,對於選擇...