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的矩阵,经过一个学期的相处,每个同学和前后左右相邻的同学互相成为了好朋友.这学期要分文理科了,每个同学对于选择文科与理科有着自己的喜悦值,而一对好朋友如果能同时选文 ...
随机推荐
- pycharm查看函数用法,参数信息的设置方法
在编写python程序时,常常会遇到一些不太常见的函数,有时候又不想去百度,那么,使用pycharm设置快速显示函数的参数和用法,这个方法十分快捷方便. step1. file -> setti ...
- Error:Cannot build artifact 'ssm:war exploded' because it is included into a circular dependency (artifact 'ssm:war exploded', artifact 'apinb-master:war exploded')
打开 File->Project Structure –> Artifacts(ctrl+alt+shift+s) ,这里会有4个,我已经删除了,把 ssm:war 和 ssm:war e ...
- Appium 1.15.1版本的appium-doctor不是内部或者外部命令的问题
先讲一下整个app自动化环境的部署过程: 1.安装appium 2.安装nodejs 3.查看appium的环境是否完成 问题:安装appium和nodejs都没啥问题,直接到对应的官网下载然后安装即 ...
- CALL和RET指令实验
实验10 1.在屏幕8行3列,用绿色显示data段中的字符串 assume cs:code data segment db data ends code segment start: ;行 ;列 ;颜 ...
- com.mysql.cj.exceptions.DataReadException: Zero date value prohibited
com.mysql.cj.exceptions.DataReadException: Zero date value prohibited at com.mysql.cj.result.SqlTime ...
- TKinter当Label绑定bind事件时传参方法
记录下tkinter的 当在label绑定bind事件时,遇到需要传参时的解决方法(因为有event存在 所以不能直接传参) https://www.cnblogs.com/liyuanhong/ar ...
- python大作业二
一.存入csv 上次爬取到了所需要的内容,但是没有存入到csv中,这次存入了csv文件中,代码如下: import requests from bs4 import BeautifulSoup imp ...
- C语言程序设计100例之(19):欢乐的跳
例19 欢乐的跳 题目描述 一个n个元素的整数数组,如果数组两个连续元素之间差的绝对值包括了[1,n-1]之间的所有整数,则称之符合“欢乐的跳”,如数组1 4 2 3符合“欢乐的跳”,因为差的绝对 ...
- JS-时间相关的函数封装
1.用JS把时间戳转换为时间,代码如下: //时间戳转换为时间 function timestampToTime(timestamp) { var date = new Date(timestamp) ...
- numpy-np.ceil,np.floor,np.expand_dims方法
np.ceil(多维数组):对多维数组的各个数向上取整 np.floor(多维数组):对多维数组的各个数向下取整 np.expand_dims(x,axis = 0):在x的第一维度上插入一个维度,a ...