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,再跑最大流,看现在的最小割是不是恰好少了等同于枚举边的容量值(枚举下一条边记得把现在枚举边的容量改回来)

  1. #include<iostream>
  2. #include<vector>
  3. #include<queue>
  4. #include<cstring>
  5. #include<cstdio>
  6. using namespace std;
  7. ;
  8. <<;
  9. struct Edge{
  10. int from,to,flow,cap;
  11. };
  12. struct Dinic{
  13. int vis[maxn],cur[maxn],d[maxn];
  14. vector<Edge> edges;
  15. vector<int> G[maxn];
  16. int s,t;
  17. void addEdge(int from,int to,int cap)
  18. {
  19. edges.push_back((Edge){,cap});
  20. G[);
  21. edges.push_back((Edge){to,,});
  22. G[to].push_back(edges.size()-);
  23. }
  24. int BFS()
  25. {
  26. memset(vis,,sizeof(vis));
  27. queue<int> Q;
  28. Q.push(s);
  29. vis[s]=;
  30. d[s]=;
  31. while(!Q.empty()){
  32. int x=Q.front();Q.pop();
  33. ;i<G[x].size();i++){
  34. Edge& e=edges[G[x][i]];
  35. if(!vis[e.to]&&e.cap>e.flow){
  36. vis[e.to]=;
  37. d[e.to]=d[x]+;
  38. Q.push(e.to);
  39. }
  40. }
  41. }
  42. return vis[t];
  43. }
  44. int DFS(int u,int a)
  45. {
  46. ) return a;
  47. ,f;
  48. for(int& i=cur[u];i<G[u].size();i++){
  49. Edge& e=edges[G[u][i]];
  50. &&(f=DFS(e.to,min(a,e.cap-e.flow)))>){
  51. e.flow+=f;
  52. edges[G[u][i]^].flow-=f;
  53. flow+=f;
  54. a-=f;
  55. if(!a) break;
  56. }
  57. }
  58. return flow;
  59. }
  60. int MaxFlow(int ss,int tt)
  61. {
  62. ;
  63. s=ss,t=tt;
  64. while(BFS()){
  65. memset(cur,,sizeof(cur));
  66. ans+=DFS(s,inf);
  67. }
  68. return ans;
  69. }
  70. int getCnt()
  71. {
  72. ;
  73. BFS();
  74. ;i<edges.size();i++){
  75. if(!edges[i].cap) continue;
  76. int a=edges[i].from,b=edges[i].to;
  77. if(vis[a]&&(!vis[b])&&edges[i].flow==edges[i].cap) cnt++;
  78. }
  79. return cnt;
  80. }
  81. };
  82. Dinic solver;
  83. int main()
  84. {
  85. int n,m;
  86. scanf("%d %d",&n,&m);
  87. ;i<=m;i++){
  88. int from,to,cap;
  89. cin>>from>>to>>cap;
  90. solver.addEdge(from,to,cap);
  91. }
  92. printf(,n));
  93. printf("%d",solver.getCnt()==2?1:solver.getCnt());
  94. ;
  95. }

USACO Section 4.4 追查坏牛奶Pollutant Control的更多相关文章

  1. [USACO Section 4.4]追查坏牛奶Pollutant Control (最小割)

    题目链接 Solution 一眼看过去就是最小割,但是要求割边最少的最小的割. 所以要用骚操作... 建边的时候每条边权 \(w = w * (E+1) + 1;\) 那么这样建图跑出来的 \(max ...

  2. 洛谷 P1344 [USACO4.4]追查坏牛奶Pollutant Control 解题报告

    P1344 [USACO4.4]追查坏牛奶Pollutant Control 题目描述 你第一天接手三鹿牛奶公司就发生了一件倒霉的事情:公司不小心发送了一批有三聚氰胺的牛奶.很不幸,你发现这件事的时候 ...

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

    题目描述 你第一天接手三鹿牛奶公司就发生了一件倒霉的事情:公司不小心发送了一批有三聚氰胺的牛奶.很不幸,你发现这件事的时候,有三聚氰胺的牛奶已经进入了送货网.这个送货网很大,而且关系复杂.你知道这批牛 ...

  4. 【题解】Luogu P1344 [USACO4.4]追查坏牛奶Pollutant Control

    原题传送门 看到这种题,应该一眼就能知道考的是最小割 没错这题就是如此简单,跑两遍最大流(最小割=最大流),一次边权为题目所给,一次边权为1 还有一种优化,优化后只需跑一次最大流,把每条边的权值改成w ...

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

    传送门 要求断掉某些边使得两个点不连通,显然是最小割 但是要求选的边数尽量少,,, 可以考虑修改边权(容量),即把边权\(c\)改成\(c*(m+1)+1\) 没了 // luogu-judger-e ...

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

    题目链接:ヾ(≧∇≦*)ゝ Solution: 第一问很好解决,根据网络流:最大流=最小割定理,我们可以轻松求出. 至于第二问,我们不妨把每一条边乘上一个大于1000的数再加上1. 这样的话,对于最小 ...

  7. 洛谷 1344 [USACO4.4]追查坏牛奶Pollutant Control——最大流

    题目:https://www.luogu.org/problemnew/show/P1344 那个边数的限制,只要把边权乘1001再+1即可.乘1001是因为有1000条边,这样流量小的不会因为边数多 ...

  8. 洛谷 P1344 追查坏牛奶Pollutant Control —— 最小割

    题目:https://www.luogu.org/problemnew/show/P1344 就是求最小割: 但是还要边数最小,所以把边权都*1001+1,这样原来流量部分是*1001,最大流一样的不 ...

  9. USACO 4.4.2 追查坏牛奶 oj1341 网络流最小割问题

    描述 Description 你第一天接手三鹿牛奶公司就发生了一件倒霉的事情:公司不小心发送了一批有三聚氰胺的牛奶.很不幸,你发现这件事的时候,有三聚氰胺的牛奶已经进入了送货网.这个送货网很大,而且关 ...

随机推荐

  1. 解决AD域认证问题—“未知的身份验证机制”

    场景: Ad认证登录系统,之前正常.不知服务器调了什么,导致无法登录.提示信息如标题. 解决方案: DirectoryEntry adRoot = new DirectoryEntry("L ...

  2. showdialog窗体不在任务栏显示的问题处理

    场景: c#开发的windows窗体用showdialog弹出时,在任务栏中 win7系统显示,win xp和win 2003却不显示. 窗体的ShowInTaskbar已设置为True. 解决: 在 ...

  3. 触发隐藏链接进行文件下载,click无响应

    function invokeClick(element) { if (element.click) element.click(); //判断是否支持click() 事件 else if (elem ...

  4. 键盘--android 隐藏系统键盘

    . -----------------------------------------已验证----------------------------------- public static void ...

  5. Hbase原理

    Hbase原理 概述 HBase是一个构建在HDFS上的分布式列存储系统:HBase是基于Google BigTable模型开发的,典型的key/value系统:HBase是Apache Hadoop ...

  6. Salted Password Hashing

    Here are some examples of poor wacky hash functions I've seen suggested in forums on the internet. m ...

  7. 修改VNC访问的密码

    :vncserver :iptables -I INPUT -p tcp --dport -j ACCEPT 客户端方式 :iptables -I INPUT -p tcp --dport -j AC ...

  8. java反射机制详解 及 Method.invoke解释

    JAVA反射机制 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法:这种动态获取的信息以及动态调用对象的方法的功能称为ja ...

  9. jps命令

    转载:http://blog.csdn.net/wanglha/article/details/40181701 ps -- JavaVirtual Machine Process Status To ...

  10. [ActionScript 3.0] AS3.0 获取文本的明暗度

    /** * 获取文字的明暗值 * @param t 文字 * @return Number */ function getDensity(t:String):Number { var ttf:Text ...