LG1344 「USACO4.4」Pollutant Control 最小割
问题描述
题解
我太菜了,我一开始竟然没有看出这是个最小割裸题。。。
两个询问。
第一个询问,直接跑最小割就好了。
第二个询问,建图的时候边权建 \(1\) ,代表割掉这条边需要 \(1\) 的代价。
\(\mathrm{Code}\)
#include<bits/stdc++.h>
using namespace std;
template <typename Tp>
void read(Tp &x){
x=0;char ch=1;int fh;
while(ch!='-'&&(ch>'9'||ch<'0')) ch=getchar();
if(ch=='-') ch=getchar(),fh=-1;
else fh=1;
while(ch>='0'&&ch<='9') x=(x<<1)+(x<<3)+ch-'0',ch=getchar();
x*=fh;
}
const int maxn=37;
const int maxm=2007;
int n,m,S,T;
struct Graph{
int Head[maxn],to[maxm],Next[maxm],w[maxm],tot=1;
Graph(){
memset(Head,0,sizeof(Head));
memset(Next,0,sizeof(Next));
}
void add(int x,int y,int z){
to[++tot]=y,Next[tot]=Head[x],Head[x]=tot,w[tot]=z;
}
}G[2];
int d[maxn];
bool bfs(int gp){
memset(d,0,sizeof(d));
queue<int>q;q.push(S);d[S]=1;
while(!q.empty()){
int x=q.front();q.pop();
for(int i=G[gp].Head[x];i;i=G[gp].Next[i]){
int y=G[gp].to[i];
if(d[y]||!G[gp].w[i]) continue;
q.push(y);d[y]=d[x]+1;
if(y==T) return true;
}
}
return false;
}
int dfs(int x,int flow,int gp){
if(x==T) return flow;
int rest=flow;
for(int i=G[gp].Head[x];i&&rest;i=G[gp].Next[i]){
int y=G[gp].to[i];
if(d[y]!=d[x]+1||!G[gp].w[i]) continue;
int k=dfs(y,min(rest,G[gp].w[i]),gp);
if(!k) d[y]=0;
else{
G[gp].w[i]-=k,G[gp].w[i xor 1]+=k;
rest-=k;
}
}
return flow-rest;
}
int ans;
int main(){
read(n);read(m);
for(int i=1,x,y,z;i<=m;i++){
read(x);read(y);read(z);
G[1].add(x,y,z);G[1].add(y,x,0);
G[0].add(x,y,1);G[0].add(y,x,0);
}
S=1,T=n;
while(bfs(1)){
int t;
while(t=dfs(S,0x3f3f3f3f,1)) ans+=t;
}
printf("%d ",ans);ans=0;
while(bfs(0)){
int t;
while(t=dfs(S,0x3f3f3f3f,0)) ans+=t;
}
printf("%d\n",ans);
return 0;
}
LG1344 「USACO4.4」Pollutant Control 最小割的更多相关文章
- [USACO Section 4.4]追查坏牛奶Pollutant Control (最小割)
题目链接 Solution 一眼看过去就是最小割,但是要求割边最少的最小的割. 所以要用骚操作... 建边的时候每条边权 \(w = w * (E+1) + 1;\) 那么这样建图跑出来的 \(max ...
- 洛谷 P1344 追查坏牛奶Pollutant Control —— 最小割
题目:https://www.luogu.org/problemnew/show/P1344 就是求最小割: 但是还要边数最小,所以把边权都*1001+1,这样原来流量部分是*1001,最大流一样的不 ...
- LOJ_6045_「雅礼集训 2017 Day8」价 _最小割
LOJ_6045_「雅礼集训 2017 Day8」价 _最小割 描述: 有$n$种减肥药,$n$种药材,每种减肥药有一些对应的药材和一个收益. 假设选择吃下$K$种减肥药,那么需要这$K$种减肥药包含 ...
- LoibreOJ 2042. 「CQOI2016」不同的最小割 最小割树 Gomory-Hu tree
2042. 「CQOI2016」不同的最小割 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: 匿名 提交提交记录统计讨论测试数据 题目描述 ...
- LibreOJ2042 - 「CQOI2016」不同的最小割
Portal Description 给出一个给出一个\(n(n\leq850)\)个点\(m(m\leq8500)\)条边的无向图.定义\(cut(s,t)\)等于\(s,t\)的最小割的容量,求在 ...
- 「CQOI2016」不同的最小割
「CQOI2016」不同的最小割 传送门 建出最小割树,把每一个点对的最小割抠出来 \(\text{unique}\) 一下就好了. 参考代码: #include <algorithm> ...
- LOJ#6045. 「雅礼集训 2017 Day8」价(最小割)
题面 传送门 题解 首先先把所有权值取个相反数来求最大收益,因为最小收益很奇怪 然后建图如下:\(S\to\)药,容量\(\inf+p_i\),药\(\to\)药材,容量\(\inf\),药材\(\t ...
- loj2042 「CQOI2016」不同的最小割
分治+最小割 看到题解的第一句话是这个就秒懂了,然后乱七八糟的错误.越界.RE-- #include <algorithm> #include <iostream> #incl ...
- 「BZOJ2127」happiness(最小割)
题目描述 高一一班的座位表是个n*m的矩阵,经过一个学期的相处,每个同学和前后左右相邻的同学互相成为了好朋友.这学期要分文理科了,每个同学对于选择文科与理科有着自己的喜悦值,而一对好朋友如果能同时选文 ...
随机推荐
- ES-索引管理
参考: https://es.xiaoleilu.com/070_Index_Mgmt/00_Intro.html 创建索引 PUT /new_index 创建更多详细设置的索引: 删除索引 DELT ...
- epub.js的使用
epub.js的使用 npm安装 npm install epubjs epub阅读器开发 ePub电子书解析和渲染 生成Book对象 this.book = new Epub(DOWNLOAD_UR ...
- Java+TestNG+Maven+Excel+IDEA接口自动化入门(一)环境配置
前置: 1.本机环境安装了maven并配置环境变量 2.本机环境安装了IDEA软件 3.本机环境安装了Java jdk 8版本 4.有一定java和maven基础 因为以上网上例子很多,就不再重复赘述 ...
- 关于spring boot上手的一点介绍
在spring官网网址 https://spring.io/guides 下,有许多相关介绍,包括可以构建的例子程序. 使用intellij idea,可以通过新建 spring boot initi ...
- reduce方法实现累加累乘的方式
reduce函数对参数序列中的值进行积累,第二个参数可以为:str,tuple,list,代码示例如下: from functools import reduce#实现列表内的所有数的累加,即第一步x ...
- curl 带 body
curl -H "Content-Type:plain/text" -X POST -d '<?xml version="1.0" encoding=&q ...
- Orcl分页查询的语法示例
Orcle分页查询SQL sql = SELECT T.* FROM (SELECT X.*, ROWNUM AS RN FROM (SELECT * FROM +表名) X WHERE ROWNU ...
- redis启动错误: Warning: no config file specified, using the default config. In order to specify a config
redis启动错误: Warning: no config file specified, using the default config. In order to specify a config ...
- JavaScript 7 获取可视窗口、网页元素、获取节点方式
获取可视窗口对象 chrom *document.body firefox *document.documentElement 获取滚动条偏移量 ele.scrollTop ele.scrollLef ...
- Cypress安装使用(E2E测试框架)
一.简介 Cypress是为现代网络打造的下一代前端测试工具,解决了开发人员和QA工程师在测试现代应用程序时面临的关键难点问题. Cypress包含免费的.开源的.可本地安装的Test Runner ...