正题

题目大意:https://www.luogu.com.cn/problem/P4123


题目大意

一张无向图,求所有点对之间有多少不同的最小割。


解题思路

考虑分治的做法,如果我们得知了(s,t)(s,t)(s,t)的最小割www,并且剩下的残量网络中连通点集SSS与sss连通,点集TTT与ttt连通。那么点集SSS到TTT的每个点对之间的最小割都是www。然后分治到两个点集去做即可。

这样下来最小割的期望次数是O(n)O(n)O(n)级别的,可以通过本题。


codecodecode

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
#include<map>
using namespace std;
const int N=900,inf=2147483647/3;
struct node{int to,next,w,ret;
}a[N*20];
int n,m,ls[N],tot=1;
int dep[N],p[N],ans;
map<int,int> mp;
queue<int> q;
void addl(int x,int y,int w){a[++tot].to=y;a[tot].next=ls[x];ls[x]=tot;a[tot].w=w;a[tot].ret=w;a[++tot].to=x;a[tot].next=ls[y];ls[y]=tot;a[tot].w=w;a[tot].ret=w;return;
}
bool bfs(int s,int t){memset(dep,0,sizeof(dep));dep[s]=1;while(!q.empty())q.pop();q.push(s);while(!q.empty()){int x=q.front();q.pop();for(int i=ls[x];i;i=a[i].next){int y=a[i].to;if(dep[y]||!a[i].w)continue;dep[y]=dep[x]+1;if(y==t)return 1;q.push(y);}}return 0;
}
int dinic(int x,int flow,int t){int rest=0,k;if(x==t)return flow;for(int i=ls[x];i;i=a[i].next){int y=a[i].to;if(dep[x]+1!=dep[y]||!a[i].w)continue;rest+=(k=dinic(y,min(flow-rest,a[i].w),t));a[i].w-=k;a[i^1].w+=k;if(flow==rest)return flow;}if(!rest)dep[x]=0;return rest;
}
bool cmp(int x,int y)
{return dep[x]<dep[y];}
void solve(int l,int r){if(l==r)return;int w=0; while(bfs(p[l],p[r]))w+=dinic(p[l],inf,p[r]);if(!mp.count(w))mp[w]=1,ans++;sort(p+l,p+1+r,cmp);int mid=l;for(int i=l;i<=r;i++)if(dep[p[i]]){mid=i;break;}for(int i=1;i<=tot;i++)a[i].w=a[i].ret;solve(l,mid-1);solve(mid,r);return;
}
int main()
{scanf("%d%d",&n,&m);for(int i=1;i<=n;i++)p[i]=i;for(int i=1;i<=m;i++){int x,y,w;scanf("%d%d%d",&x,&y,&w);addl(x,y,w);}solve(1,n);printf("%d\n",ans);
}

P4123-[CQOI2016]不同的最小割【网络流,分治】相关推荐

  1. 【LuoguP33294123】[ZJOI2011]最小割[CQOI2016]不同的最小割

    链接1 链接2 题意简述 第一个题 : 问图中有多少不同的最小割数值 第二个题 : \(q\) 次询问图中多少对点对之间的最小割小于 \(x\) . Sol 两个都是模板题就放一起了. 求完最小割树直 ...

  2. P4126 [AHOI2009]最小割(网络流/最小割)

    P4126 [AHOI2009]最小割 https://www.cnblogs.com/dugudashen/p/6228304.html 求解一张有向图中关于最小割的可行边和必须边,可行边定义为存在 ...

  3. 分治最小割 学习总结

    这是一种可以较快的求解任意两点间最小割的算法 正常的暴力的话我们要枚举点对,一共要做O(n^2)次网络流 而我们注意到设某一个S->T最小割中两个点x,y,满足x在S集合且y在T集合中 设S-& ...

  4. 【网络流24题】I、 方格取数问题(二分图的最大独立集/最小割)

    I. 方格取数问题(二分图的最大独立集/最小割) [问题分析] 二分图点权最大独立集,转化为最小割模型,从而用最大流解决. [建模方法] 首先把棋盘黑白染色,使相邻格子颜色不同,所有黑色格子看做二分图 ...

  5. 最小割分治(最小割树):BZOJ2229 BZOJ4519

    定理:n个点的无向图的最小割最多n-1个. 可能从某种形式上形成了一棵树,不是很清楚. 最小割分治:先任选两个点求一边最小割,然后将两边分别递归,就能找到所有的最小割. 这两个题是一样的,直接搬din ...

  6. 【bzoj2521】[Shoi2010]最小生成树 网络流最小割

    题目描述 Secsa最近对最小生成树问题特别感兴趣.他已经知道如果要去求出一个n个点.m条边的无向图的最小生成树有一个Krustal算法和另一个Prim的算法.另外,他还知道,某一个图可能有多种不同的 ...

  7. 【BZOJ1797】[AHOI2009]最小割(网络流)

    [BZOJ1797][AHOI2009]最小割(网络流) 题面 BZOJ 洛谷 题解 最小割的判定问题,这里就当做记结论吧.(源自\(lun\)的课件) 我们先跑一遍最小割,求出残量网络.然后把所有还 ...

  8. 734. [网络流24题] 方格取数问题 二分图点权最大独立集/最小割/最大流

    «问题描述: 在一个有m*n 个方格的棋盘中,每个方格中有一个正整数.现要从方格中取数,使任 意2 个数所在方格没有公共边,且取出的数的总和最大.试设计一个满足要求的取数算法. «编程任务: 对于给定 ...

  9. P4897 【模板】最小割树(Gomory-Hu Tree)(网络流/最小割/树形结构)

    P4897 [模板]最小割树(Gomory-Hu Tree) 这个算法可以用来求解一个无向图上任意两点的最小割,具体过程就是每次选择两个点求最小割,然后在一个新图中这两个点连边,然后对于这两个点的连通 ...

最新文章

  1. 树形DP入门题目推荐以及解析
  2. HZOJ 斐波那契(fibonacci)
  3. Spring Boot——[Unable to start LiveReload server]解决方案
  4. github的基础使用
  5. 数学大师丘成桐:中国的科技至少要倒退20年
  6. Could not find an NgModule. Use the skip-import option to skip importing in
  7. 芝麻信用很高,为什么贷款还是被拒了?
  8. 开启事物_开启大门,聚焦在正确的事物上
  9. 操作系统用户态内核态线程同步
  10. 编程师代码G都喜欢的|细致场景森系插画手机壁纸
  11. editplus php格式化,让Editplus自动格式化css和js
  12. 用于空间搜索的四叉树
  13. 计算机网络的概述以及网络的组成
  14. “征服自己是最大的胜利,被征服是最大的耻辱和邪恶。”
  15. 如何打开.pt文件?
  16. GB/T 8170-2008 数值修约规则与极限数值的表示和判定
  17. Spring框架学习笔记---完结
  18. 视频流媒体播放器EasyPlayer-RTSP-Android 如何随意切换播放视频流?
  19. 计算机用通讯电压多少,电脑ATX电源改13.8V通信用电源!
  20. C++使用AES+Base64算法对文本进行加密

热门文章

  1. php运算符优先级题目,详解php运算符优先级
  2. mysql数据库已连接数据库_001. 【已解决】Java连接MYSQL 数据库的连接步骤
  3. android管理activity顺序,android activity 六个主要函数以及一些调用顺序
  4. 北斗三号b1c频点带宽_【导航论坛】北斗三号卫星导航信号及接收策略
  5. abb限位开关已打开drv1_广告雕刻机限位开关触发
  6. tableau三轴合并_《Tableau数据可视化实战》——1.12节合并不同数据源-阿里云开发者社区...
  7. 沙洋有几个微服务群_集群 分布式 微服务
  8. java中什么是同步_Java中,“synchronized”(同步)是什么意思?什么时候应该用synchronized? - Break易站...
  9. 开头th_是什么文件_Python文件读写最详细的讲解
  10. ndr4108贴片晶振是多少频率_关于山羊挺身你知道多少?这些干货速来了解一下...