问题描述

LG1344


题解

我太菜了,我一开始竟然没有看出这是个最小割裸题。。。

两个询问。

第一个询问,直接跑最小割就好了。

第二个询问,建图的时候边权建 \(1\) ,代表割掉这条边需要 \(1\) 的代价。


\(\mathrm{Code}\)

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. template <typename Tp>
  4. void read(Tp &x){
  5. x=0;char ch=1;int fh;
  6. while(ch!='-'&&(ch>'9'||ch<'0')) ch=getchar();
  7. if(ch=='-') ch=getchar(),fh=-1;
  8. else fh=1;
  9. while(ch>='0'&&ch<='9') x=(x<<1)+(x<<3)+ch-'0',ch=getchar();
  10. x*=fh;
  11. }
  12. const int maxn=37;
  13. const int maxm=2007;
  14. int n,m,S,T;
  15. struct Graph{
  16. int Head[maxn],to[maxm],Next[maxm],w[maxm],tot=1;
  17. Graph(){
  18. memset(Head,0,sizeof(Head));
  19. memset(Next,0,sizeof(Next));
  20. }
  21. void add(int x,int y,int z){
  22. to[++tot]=y,Next[tot]=Head[x],Head[x]=tot,w[tot]=z;
  23. }
  24. }G[2];
  25. int d[maxn];
  26. bool bfs(int gp){
  27. memset(d,0,sizeof(d));
  28. queue<int>q;q.push(S);d[S]=1;
  29. while(!q.empty()){
  30. int x=q.front();q.pop();
  31. for(int i=G[gp].Head[x];i;i=G[gp].Next[i]){
  32. int y=G[gp].to[i];
  33. if(d[y]||!G[gp].w[i]) continue;
  34. q.push(y);d[y]=d[x]+1;
  35. if(y==T) return true;
  36. }
  37. }
  38. return false;
  39. }
  40. int dfs(int x,int flow,int gp){
  41. if(x==T) return flow;
  42. int rest=flow;
  43. for(int i=G[gp].Head[x];i&&rest;i=G[gp].Next[i]){
  44. int y=G[gp].to[i];
  45. if(d[y]!=d[x]+1||!G[gp].w[i]) continue;
  46. int k=dfs(y,min(rest,G[gp].w[i]),gp);
  47. if(!k) d[y]=0;
  48. else{
  49. G[gp].w[i]-=k,G[gp].w[i xor 1]+=k;
  50. rest-=k;
  51. }
  52. }
  53. return flow-rest;
  54. }
  55. int ans;
  56. int main(){
  57. read(n);read(m);
  58. for(int i=1,x,y,z;i<=m;i++){
  59. read(x);read(y);read(z);
  60. G[1].add(x,y,z);G[1].add(y,x,0);
  61. G[0].add(x,y,1);G[0].add(y,x,0);
  62. }
  63. S=1,T=n;
  64. while(bfs(1)){
  65. int t;
  66. while(t=dfs(S,0x3f3f3f3f,1)) ans+=t;
  67. }
  68. printf("%d ",ans);ans=0;
  69. while(bfs(0)){
  70. int t;
  71. while(t=dfs(S,0x3f3f3f3f,0)) ans+=t;
  72. }
  73. printf("%d\n",ans);
  74. return 0;
  75. }

LG1344 「USACO4.4」Pollutant Control 最小割的更多相关文章

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

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

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

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

  3. LOJ_6045_「雅礼集训 2017 Day8」价 _最小割

    LOJ_6045_「雅礼集训 2017 Day8」价 _最小割 描述: 有$n$种减肥药,$n$种药材,每种减肥药有一些对应的药材和一个收益. 假设选择吃下$K$种减肥药,那么需要这$K$种减肥药包含 ...

  4. LoibreOJ 2042. 「CQOI2016」不同的最小割 最小割树 Gomory-Hu tree

    2042. 「CQOI2016」不同的最小割 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: 匿名 提交提交记录统计讨论测试数据   题目描述 ...

  5. LibreOJ2042 - 「CQOI2016」不同的最小割

    Portal Description 给出一个给出一个\(n(n\leq850)\)个点\(m(m\leq8500)\)条边的无向图.定义\(cut(s,t)\)等于\(s,t\)的最小割的容量,求在 ...

  6. 「CQOI2016」不同的最小割

    「CQOI2016」不同的最小割 传送门 建出最小割树,把每一个点对的最小割抠出来 \(\text{unique}\) 一下就好了. 参考代码: #include <algorithm> ...

  7. LOJ#6045. 「雅礼集训 2017 Day8」价(最小割)

    题面 传送门 题解 首先先把所有权值取个相反数来求最大收益,因为最小收益很奇怪 然后建图如下:\(S\to\)药,容量\(\inf+p_i\),药\(\to\)药材,容量\(\inf\),药材\(\t ...

  8. loj2042 「CQOI2016」不同的最小割

    分治+最小割 看到题解的第一句话是这个就秒懂了,然后乱七八糟的错误.越界.RE-- #include <algorithm> #include <iostream> #incl ...

  9. 「BZOJ2127」happiness(最小割)

    题目描述 高一一班的座位表是个n*m的矩阵,经过一个学期的相处,每个同学和前后左右相邻的同学互相成为了好朋友.这学期要分文理科了,每个同学对于选择文科与理科有着自己的喜悦值,而一对好朋友如果能同时选文 ...

随机推荐

  1. Hackme: 1: Vulnhub Walkthrough

    下载链接: https://www.vulnhub.com/entry/hackme-1,330/ 网络扫描探测: ╰─ nmap -p1-65535 -sV -A 10.10.202.131 22/ ...

  2. RMAN异机恢复主要步骤和注意事项

    以后改行了或老了回头看看,我曾经会这些,也是件愉快的事 [备份]--创建目录[oracle@test20 backup]$ mkdir -p /home/oracle/backup--备份脚本[ora ...

  3. 解决idea中mysql连接失败Could not create connection to database server. Attempted reconnect 3 times. Giving up.

    原因是少一个参数,设置时区的.  解决方法: 加一个参数: serverTimezone=UTC jdbc:mysql://localhost:3306/SshProject?useUnicode=t ...

  4. Spring学习的第一天

    Spring是以Ioc和Aop为内核,提供了表现层spring MVC 和持久层Spring JDBC等众多应用技术,还能整合开源世界众多著名的第三方框架和类库,成为使用最多的JavaEE企业应用开源 ...

  5. 计算机网络知识之TCP/IP协议簇

    OSI参考模型 OSI的来源         OSI(Open System Interconnect),即开放式系统互联. 一般都叫OSI参考模型,是ISO(国际标准化组织)组织在1985年研究的网 ...

  6. [译]Vulkan教程(32)生成mipmap

    [译]Vulkan教程(32)生成mipmap Generating Mipmaps 生成mipmap Introduction 入门 Our program can now load and ren ...

  7. 如何封装$on,$emit,$off——学vue前你必须懂得封装!

    let evevtListenr = {} 封装$on const $on = (eventName,cb)=>{     if(!evevtListenr[eventName]){       ...

  8. Java入门总结

    1. 一个Java源码只能定义一个public类型的class,并且class名称和文件名要完全一致: 使用javac可以将.java源码编译成.class字节码: 使用java可以运行一个已编译的J ...

  9. PHP程序执行的过程原理

    为了以后能开发PHP扩展,就一定要了解PHP的执行顺序.这篇文章就是为C开发PHP扩展做铺垫. Web环境我们假设为Apache.在编译PHP的时候,为了能够让Apache支持PHP,我们会生成一个m ...

  10. 在Asp.Net或.Net Core中配置使用MarkDown富文本编辑器有开源模板代码(代码是.net core3.0版本)

    研究如何使用Markdown你们可能要花好几天才能搞定,但是看我的文章或者下载了源码,你搞定一般在10分钟之内.我先给各位介绍下它: Markdown 是一种轻量级标记语言,它允许人们使用易读易写的纯 ...