USACO 4.4 Pollutant Control(最小割,求最优解)

2015-03-25 16:52:22

思路:题意说了半天其实就是求最小割,然后输出。并且要求(1)流量相等时边数较小,(2)流量边数相等时要求边的编号字典序最小。

  关于最小割,浏览了相关资料和07胡伯涛论文... 大概知道:

   (1)最大流流量= 最小割流量。

   (2)最小割把点分成S,T,其中起点 s ∈ S,终点 t ∈ T,割边就是e = {(u,v) | u ∈ S , v ∈ T}。

   (3)最小割的边都满流,但满流的边并不一定属于最小割。 

  对于这题:

  首先,要处理要求(1),看了别人的博客... 看到个很神的方法,把每条边的流量 × (M+1)+1,再跑最大流,得到Max_flow。

  那么最大流流量为 Max_flow / (M+1),最小割的边数为 Max_flow % (M+1)。(思考!)

  原因:不作处理的最大流仅能求出最小割的流量,但不能使边数较小。所以我们尝试给每条边附加一个权值又不至于影响最小割结果。

  其次,要处理要求(2)及其输出解,可以从起点做一次 floodfill(其实就是从起点出发的DFS,沿着未满流的边的走),标记 S 点集。

  再从终点做一次 floodfill(这是一种反向遍历),标记 T 点集合。那么 e = {(u,v) | (u∈S&&v∈T) || (u∉S&&v∉T)}。

  也就是说某边为割边当且仅当该边的两个点不同时在S中或T中。

  要保证边的编号的字典序最小只要按照输入的顺序检索所有边即可,直到符合要求边的数量 == 最小割边数。

  1 /*
  2 ID:naturec1
  3 PROG: milk6
  4 LANG: C++
  5 */
  6 #include <cstdio>
  7 #include <cstring>
  8 #include <cstdlib>
  9 #include <cmath>
 10 #include <vector>
 11 #include <map>
 12 #include <set>
 13 #include <stack>
 14 #include <queue>
 15 #include <string>
 16 #include <iostream>
 17 #include <algorithm>
 18 using namespace std;
 19 
 20 #define MEM(a,b) memset(a,b,sizeof(a))
 21 #define REP(i,n) for(int i=1;i<=(n);++i)
 22 #define REV(i,n) for(int i=(n);i>=1;--i)
 23 #define FOR(i,a,b) for(int i=(a);i<=(b);++i)
 24 #define RFOR(i,a,b) for(int i=(a);i>=(b);--i)
 25 #define getmid(l,r) ((l) + ((r) - (l)) / 2)
 26 #define MP(a,b) make_pair(a,b)
 27 
 28 typedef long long ll;
 29 typedef pair<int,int> pii;
 30 const int INF = (1 << 30) - 1;
 31 const int MAXN = 50;
 32 const int MAXM = 1010;
 33 
 34 int N,M,S[MAXN];
 35 struct edge{
 36     int u,v,next,id;
 37     ll cp;
 38 };
 39 
 40 struct Max_flow{
 41     int first[MAXN],ecnt;
 42     int st,ed,lev[MAXN];
 43     edge e[MAXM * 8];
 44     void init(int tst,int ted){
 45         MEM(first,-1);
 46         ecnt = 0;
 47         st = tst;
 48         ed = ted;
 49     }
 50     void add_edge(int u,int v,ll c,int id){
 51         e[ecnt].next = first[u];
 52         e[ecnt].u = u;
 53         e[ecnt].v = v;
 54         e[ecnt].id = id;
 55         e[ecnt].cp = c;
 56         first[u] = ecnt++;
 57 
 58         e[ecnt].next = first[v];
 59         e[ecnt].u = v;
 60         e[ecnt].v = u;
 61         e[ecnt].id = id;
 62         e[ecnt].cp = 0;
 63         first[v] = ecnt++;
 64     }
 65     bool bfs(){
 66         queue<int> Q;
 67         Q.push(st);
 68         MEM(lev,-1);
 69         lev[st] = 0;
 70         while(!Q.empty()){
 71             int cur = Q.front(); Q.pop();
 72             for(int i = first[cur]; ~i; i = e[i].next){
 73                 int v = e[i].v;
 74                 if(lev[v] < 0 && e[i].cp > 0){
 75                     lev[v] = lev[cur] + 1;
 76                     Q.push(v);
 77                 }
 78             }
 79         }
 80         return lev[ed] != -1;
 81     }
 82     ll dfs(int p,ll minf){
 83         if(p == ed) return minf;
 84         for(int i = first[p]; ~i; i = e[i].next){
 85             int v = e[i].v;
 86             if(lev[v] > lev[p] && e[i].cp > 0){
 87                 ll d = dfs(v,min(e[i].cp,minf));
 88                 if(d > 0){
 89                     e[i].cp -= d;
 90                     e[i ^ 1].cp += d;
 91                     return d;
 92                 }
 93             }
 94         }
 95         return 0;
 96     }
 97     ll dinic(){
 98         ll max_flow = 0,cur;
 99         while(bfs()){
100             while((cur = dfs(st,1LL << 60)) > 0)
101                 max_flow += cur;
102         }
103         return max_flow;
104     }
105     void Flood_fill(int p){
106         S[p] = 1;
107         for(int i = first[p]; ~i; i = e[i].next){
108             int v = e[i].v;
109             if(S[v] || e[i].cp <= 0) continue;
110             Flood_fill(v);
111         }
112     }
113     void A_Flood_fill(int p){
114         S[p] = -1;
115         for(int i = first[p]; ~i; i = e[i].next){
116             int v = e[i].v;
117             if(S[v] || e[i ^ 1].cp <= 0) continue;
118             A_Flood_fill(v);
119         }
120     }
121 }MF;
122 
123 int main(){
124     freopen("milk6.in","r",stdin);
125     freopen("milk6.out","w",stdout);
126     int a,b;
127     ll c;
128     scanf("%d%d",&N,&M);
129     MF.init(1,N);
130     REP(i,M){
131         scanf("%d%d%lld",&a,&b,&c);
132         c = c * (M + 1) + 1;
133         MF.add_edge(a,b,c,i);
134         //MF.add_edge(b,a,c,i);
135     }
136     ll tmax_flow = MF.dinic();
137     MF.Flood_fill(MF.st);
138     MF.A_Flood_fill(MF.ed);
139     ll anscnt = tmax_flow % (M + 1);
140     printf("%lld %lld\n",tmax_flow / (M + 1),anscnt);
141     if(tmax_flow){
142         int tcnt = 0;
143         for(int i = 0; tcnt < anscnt && i < MF.ecnt; i += 2){
144             int tmp = S[MF.e[i].u] + S[MF.e[i].v];
145             if(MF.e[i].cp == 0 && tmp != 2 && tmp != -2){
146                 printf("%d\n",MF.e[i].id);
147                 ++tcnt;
148             }
149         }
150     }
151     return 0;
152 }

 

转载于:https://www.cnblogs.com/naturepengchen/articles/4366277.html

STM32 HAL库下精准延时1us?实测告诉你真相(附DS18B20驱动避坑经验) 本文深入探讨了STM32 HAL库下实现精准1微秒延时的技术挑战与解决方案,特别针对DS18B20温度传感器的驱动需求。通过对比循环延时、SysTick非中断延时和硬件定时器延时三种方案,提供了基于SysTick的优化实现方法,并分享了实际调试中的避坑经验与精度验证数据,帮助开发者高效解决时序敏感外设的驱动问题。 阅读详情

相关推荐

PSF(点扩散函数)与去卷积算法消除图像模糊

本文旨在总结图像处理中使用去卷积的传统方法来进行图像去模糊的相关知识。

m0_53607446的博客 6014

[USACO4.4] 追查坏牛奶 Pollutant Control

对于 100 \%100% 的数据,满足 2 \le N \le 322≤N≤32,0 \le M \le 10^30≤M≤103,1 \le S_i \le N1≤Si​≤N,1 \le E_i \le N1≤Ei​≤N,0 \le C_i \le 2 \times 10^60≤Ci​≤2×106。在追查这些有三聚氰胺的牛奶的时候,有必要保证它不被送到零售商手里,所以必须使某些运输卡车停止运输,但是停止每辆卡车都会有一定的经济损失。因为要找最少的边(有的oj还要找出边的标号),所以要把。

NDCSID的博客 483

从零配置Archery:手把手教你用Docker部署多数据库审核系统(MySQL/PostgreSQL/ClickHouse)

本文详细介绍了如何从零开始使用Docker部署Archery多数据库审核系统,涵盖MySQL、PostgreSQL和ClickHouse的配置与整合。文章提供了生产级Docker-compose配置、审核规则定制、工单流程设置以及企业微信通知集成等实战指南,帮助团队构建统一的企业级SQL审计平台,提升数据库操作规范与安全。

e4f5g6h7的博客 941

USACO Section 4.4 Pollutant Control

题意: 一幅图求最小割  要求: 1、它是最小割(fei'hua)

House 817

DPABI安装教程

DPABI是是中科院心理研究所严超赣老师团队开发的一款磁共振脑影像数据分析工具包。基于SPM,在安装DPABI之前需要安装好SPM,才能正常使用。SPM的安装方法见文matlab2021a版本条件下安装spm_kidllll的博客-优快云博客 1、下载安装包 下载地址:DPABI: a toolbox for Data Processing & Analysis for Brain Imaging | The R-fMRI Network 2、将下载好的dpabi文件夹移动到matl..

qq_42356925的博客 1万+

无线通信入门:3种键控法(ASK/FSK/PSK)原理图解与实战对比

本文深入解析无线通信中ASK、FSK、PSK三种基础键控法的原理与应用。通过图解对比,阐明幅移键控(ASK)简单低成本但抗干扰差,频移键控(FSK)稳健且应用广泛,相移键控(PSK)高效但复杂。文章结合实战场景,为物联网和嵌入式开发者在选型时提供关键指导,帮助平衡数据速率、成本、功耗与抗干扰需求。

weixin_29274969的博客 187

USACO Pollutant Control 解题报告

这道题是mincut问题。maxflow-mincut原理是说,yi'ge

thestoryofsnow的专栏 608

COMSOL模拟CO2驱替CH4:多物理场耦合建模与工程应用详解

在非常规天然气开发与碳封存工程中,多孔介质内的渗流、吸附与岩石变形相互耦合,使得CO2驱替CH4的产能预测和CO2封存评估无法仅靠经验公式完成。以达西定律描述裂隙流动、以扩展Langmuir方程刻画竞争吸附、用应力-吸附-渗透率关系关联煤岩变形,是多物理场耦合数值模拟的核心路径。COMSOL Multiphysics凭借内置渗流、固体力学与组分传递接口,能够将这些机制整合为可参数化扫描的仿真模型,为注气压力、井距、渗透率演化等方案设计提供量化依据。围绕CO2驱替CH4模拟的建模流程、参数取法与结果判读,可形

weixin_29574585的博客 160

P1344 [USACO4.4] 追查坏牛奶 Pollutant Control

给定一张n点m边的有向图,求1→n的最小割的容量和边数。

pystraf的博客 245

DISM错误87详解:RestoreHealth选项无法识别的修复方法

DISM(部署映像服务和管理工具)是Windows系统维护与修复的核心命令行工具,常与SFC(系统文件检查器)配合使用,用于扫描和修复组件存储损坏、系统文件缺失等问题。在执行系统健康检查时,用户常会遭遇错误87,提示“未在此上下文中识别出restorehealth选项”。该错误的本质并非工具损坏,而是命令参数结构不符合DISM的语法解析规则,或当前系统环境(如Windows 7、WinRE/PE、32位环境)不支持该参数。理解DISM的命令层级、参数挂载关系以及运行上下文,是精准排除故障的前提。通过核对标准

weixin_34116482的博客 469

从光猫到机顶盒:H10G-13融合网关双系统网络配置全解析(含超密获取技巧)

本文详细解析了中国移动H10G-13融合网关的双系统网络配置,涵盖光猫路由与安卓电视盒子的协同工作。通过晶晨S905L3芯片的优化,设备实现高效网络接入与安卓9.0系统的定制化应用,特别适合酒店和民宿行业的智能化改造。文章还提供了超密获取技巧和线刷固件包的实用指南。

weixin_42525264的博客 946

usaco training 4.4.2 Pollutant Control 追查坏牛奶 题解

Pollutant Control题解 Hal Burch It's your first day in Quality Control at Merry Milk Makers, and already there's been a catastrophe: a shipment of bad milk has been sent out. Unfortunately, you didn

阿蒋的专栏 2693

Vue3 - 实现集成配置百度语音识别转文字,长按或开启录音并将录音文件实时转换为文字,上传音频文件利用百度语音识别API转换为文本并展示(vue3百度智能云API实现上传录音文件并转换成文字案例)

vue3对接百度智能云语音识别,vue3 h5移动端网页中实现语音识别,百度语音识别录音转文字_百度智能云,vue3如何使用百度语音识别,如何将语音转文字,使用vue3实现录音并将录音转换为文字,vue3如何实现语音输入功能功能,vue3集成百度智能云API实现录音转文字详细教程完整示例代码demo,VUE3使用百度语音识别语音转文字,vue调用百度语音识别,vue3百度语音识别文字并展示功能,vue3免费语音转文本api,百度语音识别申请配置教程,Vue3项目配置自定义界面百度语音识别转文字和原生使用方式

🏆 前端领域优质创作者 2726

网络流——洛谷P1344 [USACO4.4]追查坏牛奶Pollutant Control

https://www.luogu.org/problem/show?pid=1344 看到一中超级流弊的方法 可以将题目转化模型, 就是求割边最少的最小割, 其实是套路题, 把边的权值全部乘以一个较大的数E再加1, 网络流的答案ans; 那么ans/E, ans%E, 分别就是两问的答案了, 其实就是对于原图中相同的最小割, 在新图上跑最小割时, 对于在原图上相同的代价, 新图会选取尽

我怎么这么菜的呢 588

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

P1344 [USACO4.4] 追查坏牛奶Pollutant Control

类型:最小割 建模分析: 很明显,每个仓库就是节点,而车即为管道。 要求我们不能有从1->n的路径,就是把1,n分到两个集合去。 第一问我们把容量设为运输费用 套用最小割==最大流定理求出答案。 第二问我们直接把容量搞成1就可以求出最少停几辆车。 不用很麻烦的贪心了,Dinic足够快,跑两次也无所谓。 Luogu #include #include #include #inc

HT008的Blog 415

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

USACO 4.4 Pollutant Control

非常不错的一个最大流的题目,对边的处理很巧妙。这个链接的解题报告比较好:http://hi.baidu.com/mengyun1993/blog/item/c30d193c9a85932870cf6cda.html 总体上分3步,这题不看解题报告真不好做,我自己想了半个多小时,只想到了如何判断一条边是否在最小割中,也就是解题报告中说的“退流定理”~ 再赞一下USACO,题目确实很不错,很多问题...

weixin_30723433的博客 155

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

usaco 4.4 Pollutant Control(最小割最少边数字典序最小)

Pollutant Control Hal Burch It's your first day in Quality Control at Merry Milk Makers, and already there's been a catastrophe: a shipment of bad milk has been sent out. Unfortunately, you didn't d

志当存高远 949

[USACO4.4]追查坏牛奶Pollutant Control

int sum=0;}#if 0#endifstruct ss{ll cap;}Q.push(1);level[1]=1;while(!Q.pop();i;}int res=0;i;res+=tmp;if(!}return res;}int main(){}

m0_74821245的博客 338

usaco Pollutant Control

/* ID:jinbo wu TASK:milk6 LANG:C++ */ #include #define INF 0x7fffffff using namespace std; int N,M; int level[205]; int Si,Ei,Ci; struct Dinic { int c; int f; }edge[205][205];

silence401的博客 490

UsacoTraining Chapter4.4 Pollutant Control

Pollutant ControlHal BurchIt's your first day in Quality Control at Merry Milk Makers, and already there's been a catastrophe: a shipment of bad milk has been sent out. Unfortunately, you didn't disco...

nflsjxc的博客 344

洛谷 P1344 [USACO4.4] 追查坏牛奶Pollutant Control【网络流】

省选Day2来临前给自己一个提醒:关键时刻记得开long long! 好,我们来看一个简单的网络流题。 如何在求最小割的同时得到最小割的边数呢? P1344 [USACO4.4]追查坏牛奶Pollutant Control 题目描述 你第一天接手三鹿牛奶公司就发生了一件倒霉的事情:公司不小心发送了一批有三聚氰胺的牛奶。很不幸,你发现这件事的时候,有三聚氰胺的牛奶已经进入了送货网。这个送货...

高斯的博客 423

【usaco】4.4.2最小割集PROB Pollutant Control

Pollutant Control Hal Burch It's your first day in Quality Control at Merry Milk Makers, and already there's been a catastrophe: a shipme

马云雷的专栏 1212

USACO Section 4.4 Pollutant Control - 找更优的搜索枚举方案~

首先最原始的方法就是不断地枚举要去掉的边~~直到从1出发到不了N...中间可以用个优化...若所去掉的边代价和大于前面找到的解..那么就剪掉...开始我确实这么写了..前几个没错..但效率很捉急啊....     再在这个方向想...因为每次去掉一条边后..都要从起点开始进行此搜索..能到达终点才继续往下搜..何不把这个搜索过程利用起来...于是我就把每次搜索找到的路径记录下来...而去掉的边总

zzyzzy12 1151

Pollutant Control

题意:不想写,摘抄NOCOW翻译(http://www.nocow.cn/index.php/Translate:USACO/milk6) 描述 你第一天接手三鹿牛奶公司就发生了一件倒霉的事情:公司不小心发送了一批有三聚氰胺的牛奶。很不幸,你发现这件事的时候,有三聚氰胺的牛奶已经进入了送货网。这个送货网很大,而且关系复杂。你知道这批牛奶要发给哪个零售商,但是要把这批牛奶送到他手中有

原味 830
上一篇: USACO 4.4 Frame Up(拓扑排序,全部解)
下一篇: USACO 4.4 Shuttle Puzzle(数学)
dingdi3021
博客等级 码龄11年 1粉丝 230原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值