USACO Section 4.4 追查坏牛奶Pollutant Control
http://www.luogu.org/problem/show?pid=1344
题目描述
你第一天接手三鹿牛奶公司就发生了一件倒霉的事情:公司不小心发送了一批有三聚氰胺的牛奶。很不幸,你发现这件事的时候,有三聚氰胺的牛奶已经进入了送货网。这个送货网很大,而且关系复杂。你知道这批牛奶要发给哪个零售商,但是要把这批牛奶送到他手中有许多种途径。送货网由一些仓库和运输卡车组成,每辆卡车都在各自固定的两个仓库之间单向运输牛奶。在追查这些有三聚氰胺的牛奶的时候,有必要保证它不被送到零售商手里,所以必须使某些运输卡车停止运输,但是停止每辆卡车都会有一定的经济损失。你的任务是,在保证坏牛奶不送到零售商的前提下,制定出停止卡车运输的方案,使损失最小。
输入输出格式
输入格式:
第一行: 两个整数N(2<=N<=32)、M(0<=M<=1000), N表示仓库的数目,M表示运输卡车的数量。仓库1代 表发货工厂,仓库N代表有三聚氰胺的牛奶要发往的零售商。 第2..M+1行: 每行3个整数Si,Ei,Ci。其中Si,Ei表示这 辆卡车的出发仓库,目的仓库。Ci(0 <= C i <= 2,000,000) 表示让这辆卡车停止运输的损失。
输出格式:
两个整数C、T:C表示最小的损失,T表示在损失最小的前提下,最少要停止的卡车数。
跑一遍最大流,求最小割(调不出WA的一个点 暂时打表了...)原题是要求哪些边是属于最小割的,洛谷上的题目去掉了这个要求,要求属于最小割的边,做法是枚举每一条边,把边的容量改为0,再跑最大流,看现在的最小割是不是恰好少了等同于枚举边的容量值(枚举下一条边记得把现在枚举边的容量改回来)
- #include<iostream>
- #include<vector>
- #include<queue>
- #include<cstring>
- #include<cstdio>
- using namespace std;
- ;
- <<;
- struct Edge{
- int from,to,flow,cap;
- };
- struct Dinic{
- int vis[maxn],cur[maxn],d[maxn];
- vector<Edge> edges;
- vector<int> G[maxn];
- int s,t;
- void addEdge(int from,int to,int cap)
- {
- edges.push_back((Edge){,cap});
- G[);
- edges.push_back((Edge){to,,});
- G[to].push_back(edges.size()-);
- }
- int BFS()
- {
- memset(vis,,sizeof(vis));
- queue<int> Q;
- Q.push(s);
- vis[s]=;
- d[s]=;
- while(!Q.empty()){
- int x=Q.front();Q.pop();
- ;i<G[x].size();i++){
- Edge& e=edges[G[x][i]];
- if(!vis[e.to]&&e.cap>e.flow){
- vis[e.to]=;
- d[e.to]=d[x]+;
- Q.push(e.to);
- }
- }
- }
- return vis[t];
- }
- int DFS(int u,int a)
- {
- ) return a;
- ,f;
- for(int& i=cur[u];i<G[u].size();i++){
- Edge& e=edges[G[u][i]];
- &&(f=DFS(e.to,min(a,e.cap-e.flow)))>){
- e.flow+=f;
- edges[G[u][i]^].flow-=f;
- flow+=f;
- a-=f;
- if(!a) break;
- }
- }
- return flow;
- }
- int MaxFlow(int ss,int tt)
- {
- ;
- s=ss,t=tt;
- while(BFS()){
- memset(cur,,sizeof(cur));
- ans+=DFS(s,inf);
- }
- return ans;
- }
- int getCnt()
- {
- ;
- BFS();
- ;i<edges.size();i++){
- if(!edges[i].cap) continue;
- int a=edges[i].from,b=edges[i].to;
- if(vis[a]&&(!vis[b])&&edges[i].flow==edges[i].cap) cnt++;
- }
- return cnt;
- }
- };
- Dinic solver;
- int main()
- {
- int n,m;
- scanf("%d %d",&n,&m);
- ;i<=m;i++){
- int from,to,cap;
- cin>>from>>to>>cap;
- solver.addEdge(from,to,cap);
- }
- printf(,n));
- printf("%d",solver.getCnt()==2?1:solver.getCnt());
- ;
- }
USACO Section 4.4 追查坏牛奶Pollutant Control的更多相关文章
- [USACO Section 4.4]追查坏牛奶Pollutant Control (最小割)
题目链接 Solution 一眼看过去就是最小割,但是要求割边最少的最小的割. 所以要用骚操作... 建边的时候每条边权 \(w = w * (E+1) + 1;\) 那么这样建图跑出来的 \(max ...
- 洛谷 P1344 [USACO4.4]追查坏牛奶Pollutant Control 解题报告
P1344 [USACO4.4]追查坏牛奶Pollutant Control 题目描述 你第一天接手三鹿牛奶公司就发生了一件倒霉的事情:公司不小心发送了一批有三聚氰胺的牛奶.很不幸,你发现这件事的时候 ...
- 洛谷 P1344 [USACO4.4]追查坏牛奶Pollutant Control
题目描述 你第一天接手三鹿牛奶公司就发生了一件倒霉的事情:公司不小心发送了一批有三聚氰胺的牛奶.很不幸,你发现这件事的时候,有三聚氰胺的牛奶已经进入了送货网.这个送货网很大,而且关系复杂.你知道这批牛 ...
- 【题解】Luogu P1344 [USACO4.4]追查坏牛奶Pollutant Control
原题传送门 看到这种题,应该一眼就能知道考的是最小割 没错这题就是如此简单,跑两遍最大流(最小割=最大流),一次边权为题目所给,一次边权为1 还有一种优化,优化后只需跑一次最大流,把每条边的权值改成w ...
- luogu P1344 [USACO4.4]追查坏牛奶Pollutant Control
传送门 要求断掉某些边使得两个点不连通,显然是最小割 但是要求选的边数尽量少,,, 可以考虑修改边权(容量),即把边权\(c\)改成\(c*(m+1)+1\) 没了 // luogu-judger-e ...
- [USACO4.4]追查坏牛奶Pollutant Control
题目链接:ヾ(≧∇≦*)ゝ Solution: 第一问很好解决,根据网络流:最大流=最小割定理,我们可以轻松求出. 至于第二问,我们不妨把每一条边乘上一个大于1000的数再加上1. 这样的话,对于最小 ...
- 洛谷 1344 [USACO4.4]追查坏牛奶Pollutant Control——最大流
题目:https://www.luogu.org/problemnew/show/P1344 那个边数的限制,只要把边权乘1001再+1即可.乘1001是因为有1000条边,这样流量小的不会因为边数多 ...
- 洛谷 P1344 追查坏牛奶Pollutant Control —— 最小割
题目:https://www.luogu.org/problemnew/show/P1344 就是求最小割: 但是还要边数最小,所以把边权都*1001+1,这样原来流量部分是*1001,最大流一样的不 ...
- USACO 4.4.2 追查坏牛奶 oj1341 网络流最小割问题
描述 Description 你第一天接手三鹿牛奶公司就发生了一件倒霉的事情:公司不小心发送了一批有三聚氰胺的牛奶.很不幸,你发现这件事的时候,有三聚氰胺的牛奶已经进入了送货网.这个送货网很大,而且关 ...
随机推荐
- 解决AD域认证问题—“未知的身份验证机制”
场景: Ad认证登录系统,之前正常.不知服务器调了什么,导致无法登录.提示信息如标题. 解决方案: DirectoryEntry adRoot = new DirectoryEntry("L ...
- showdialog窗体不在任务栏显示的问题处理
场景: c#开发的windows窗体用showdialog弹出时,在任务栏中 win7系统显示,win xp和win 2003却不显示. 窗体的ShowInTaskbar已设置为True. 解决: 在 ...
- 触发隐藏链接进行文件下载,click无响应
function invokeClick(element) { if (element.click) element.click(); //判断是否支持click() 事件 else if (elem ...
- 键盘--android 隐藏系统键盘
. -----------------------------------------已验证----------------------------------- public static void ...
- Hbase原理
Hbase原理 概述 HBase是一个构建在HDFS上的分布式列存储系统:HBase是基于Google BigTable模型开发的,典型的key/value系统:HBase是Apache Hadoop ...
- Salted Password Hashing
Here are some examples of poor wacky hash functions I've seen suggested in forums on the internet. m ...
- 修改VNC访问的密码
:vncserver :iptables -I INPUT -p tcp --dport -j ACCEPT 客户端方式 :iptables -I INPUT -p tcp --dport -j AC ...
- java反射机制详解 及 Method.invoke解释
JAVA反射机制 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法:这种动态获取的信息以及动态调用对象的方法的功能称为ja ...
- jps命令
转载:http://blog.csdn.net/wanglha/article/details/40181701 ps -- JavaVirtual Machine Process Status To ...
- [ActionScript 3.0] AS3.0 获取文本的明暗度
/** * 获取文字的明暗值 * @param t 文字 * @return Number */ function getDensity(t:String):Number { var ttf:Text ...