CQOI 2016 不同的最小割
题目大意:一个无向图,求所有点对不同的最小割种类数
最小割最多有n-1个,这n-1个最小割构成一个最小割树
分治法寻找n-1个最小割。对于当前点集X,任选两点为ST做最小割,然后找出与S相连的所有点和与T相连的所有点构成S集与T集,更新S集与T集的最小割。然后递归处理两个集合。
最后将最小割排序,找出有多少不同最小割即可
#include<bits/stdc++.h>
#define inf 0x7ffffff
using namespace std;
inline int read(){
int s=;char ch=getchar();
for(;ch<''||ch>'';ch=getchar());
for(;ch>=''&&ch<='';ch=getchar())s=s*+ch-'';
return s;
}
struct edge{
int to,next;
int cap;
}G[];
int tot=,h[],S,T;
void add(int x,int y,int z){
tot++;G[tot].to=y;G[tot].next=h[x];G[tot].cap=z;h[x]=tot;
}
int vis[],mark[];
int a[];
int n,m;
set<int>s;
bool bfs(){
memset(vis,,sizeof(vis));
queue<int>Q;Q.push(S);vis[S]=;
while(!Q.empty()){
int u=Q.front();Q.pop();
for(int i=h[u];i;i=G[i].next){
int v=G[i].to;
if(vis[v]||G[i].cap<=)continue;
vis[v]=vis[u]+;
Q.push(v);
}
}return vis[T];
}
int dfs(int u,int w){
if(u==T||w==)return w;
int flow=;
for(int i=h[u];i;i=G[i].next){
int v=G[i].to;
if(vis[v]!=vis[u]+||G[i].cap<=)continue;
if(int t=dfs(v,min(w,G[i].cap))){
G[i].cap-=t;G[i^].cap+=t;
flow+=t;w-=t;
if(!w)break;
}
}
if(!flow)vis[u]=;
return flow;
}
int dinic(){
int f=;
while(bfs())f+=dfs(S,inf);
return f;
}
void dfs(int x){
mark[x]=;
for(int i=h[x];i;i=G[i].next)
if(G[i].cap&&!mark[G[i].to])
dfs(G[i].to);
}
void clear(){
for(int i=;i<=tot;i+=)
G[i].cap=G[i^].cap=(G[i].cap+G[i^].cap)/;
}
int tmp[];
void solve(int l,int r){
if(l==r)return;
clear();
S=a[l],T=a[r];
int t=dinic();
s.insert(t);
memset(mark,,sizeof(mark));
dfs(S);
int L=l,R=r;
for(int i=l;i<=r;++i)
if(mark[a[i]])tmp[L++]=a[i];
else tmp[R--]=a[i];
for(int i=l;i<=r;++i)a[i]=tmp[i];
solve(l,L-);solve(R+,r);
}
int main(){
n=read();m=read();
for(int i=;i<=m;++i){
int u=read(),v=read(),w=read();
add(u,v,w);add(v,u,w);
}
for(int i=;i<=n;++i)a[i]=i;
solve(,n);
printf("%d\n",s.size());
return ;
}
CQOI 2016 不同的最小割的更多相关文章
- HDU 5889 Barricade 【BFS+最小割 网络流】(2016 ACM/ICPC Asia Regional Qingdao Online)
Barricade Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total S ...
- ZJOI 最小割 CQOI 不同的最小割 (最小割分治)
题目1 ZJOI 最小割 题目大意: 求一个无向带权图两点间的最小割,询问小于等于c的点对有多少. 算法讨论: 最小割 分治 代码: #include <cstdlib> #include ...
- (2016北京集训十三)【xsy1532】网络战争 - 最小割树+树上倍增+KD树
题解: 好题!! 这题似乎能上我代码长度记录的前五? 调试时间长度应该也能上前五QAQ 首先题目要求的明显就是最小割,当然在整个森林上求Q次最小割肯定是会GG的,所以我们需要一个能快速求最小割的算法— ...
- BZOJ1497: [NOI2006]最大获利[最小割 最大闭合子图]
1497: [NOI2006]最大获利 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 4375 Solved: 2142[Submit][Status] ...
- 【HDU 5855】Less Time, More profit(网络流、最小割、最大权闭合子图)
Less Time, More profit Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/O ...
- hdu4289 最小割最大流 (拆点最大流)
最小割最大流定理:(参考刘汝佳p369)增广路算法结束时,令已标号结点(a[u]>0的结点)集合为S,其他结点集合为T=V-S,则(S,T)是图的s-t最小割. Problem Descript ...
- BZOJ4519: [Cqoi2016]不同的最小割
Description 学过图论的同学都知道最小割的概念:对于一个图,某个对图中结点的划分将图中所有结点分成 两个部分,如果结点s,t不在同一个部分中,则称这个划分是关于s,t的割.对于带权图来说,将 ...
- hdu-5889-最短路+网络流/最小割
Barricade Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total S ...
- HDU 5889 Barricade(最短路+最小割水题)
Barricade Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total ...
随机推荐
- Tensorflow serving的编译
Tensorflow serving提供了部署tensorflow生成的模型给线上服务的方法,包括模型的export,load等等. 安装参考这个 https://github.com/tensorf ...
- 【DWR系列01】-DWR简介及入门例子
.literal { background-color: #f2f2f2; border: 1px solid #cccccc; padding: 1px 3px 0; white-space: no ...
- js == 与 === 的区别
1.对于string,number等基础类型,==和===是有区别的 1)不同类型间比较,==之比较“转化成同一类型后的值”看“值”是否相等,===如果类型不同,其结果就是不等 2)同类型比较,直接进 ...
- eclipse启动不了,出现“Java was started but returned exit code=13......”对话框
eclipse启动不了,出现"Java was started but returned exit code=13......"对话框如下 解决方案:1.使用的是java jdk6 ...
- MIT 6.828 JOS学习笔记17. Lab 3.1 Part A User Environments
Introduction 在这个实验中,我们将实现操作系统的一些基本功能,来实现用户环境下的进程的正常运行.你将会加强JOS内核的功能,为它增添一些重要的数据结构,用来记录用户进程环境的一些信息:创建 ...
- Redis集群搭建1
wget .168.0.201:6379 192.168.0.201:6380 192.168.0.201:6381 192.168.0.202:16379 192.168.0.202:16380 1 ...
- lamp
Linux+Apache+Mysql/MariaDB+Perl/PHP/Python一组常用来搭建动态网站或者服务器的开源软件,本身都是各自独立 的程序,但是因为常被放在一起使用,拥有了越来越高的 ...
- 【转】使用Spring MVC统一异常处理实战
方法一:使用SimpleMappingExceptionResolver实现异常处理 //在Spring的配置文件applicationContext.xml中增加以下内容: <bean cla ...
- 4.4 多线程进阶篇<下>(NSOperation)
本文并非最终版本,如有更新或更正会第一时间置顶,联系方式详见文末 如果觉得本文内容过长,请前往本人"简书" 本文源码 Demo 详见 Github https://github.c ...
- js遍历json
function test1(){ var json = [{name:'wang',age:22,sex:1},{name:'tang',age:25,sex:1},{name:'yuan',age ...