bzoj4435: [Cerc2015]Juice Junctions(最小割树+hash)
首先最大流等于最小割,那么可以转化为最小割树来做(不知道什么是最小割树的可以看看这题->这里)
具体的做法似乎是$hash[i][j]$表示最小割为$i$时点$j$是否与$S$连通
然后据Claris大爷说这题卡dinic,只能用EK
顺便吐槽一句,Claris大爷的代码真的不能看……
//minamoto
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#define inf 0x3f3f3f3f3
using namespace std;
#define getc() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++)
char buf[<<],*p1=buf,*p2=buf;
inline int read(){
#define num ch-'0'
char ch;bool flag=;int res;
while(!isdigit(ch=getc()))
(ch=='-')&&(flag=true);
for(res=num;isdigit(ch=getc());res=res*+num);
(flag)&&(res=-res);
#undef num
return res;
}
const int N=;
int ver[N<<],Next[N<<],edge[N<<],head[N],tot=;
inline void add(int u,int v,int e){
ver[++tot]=v,Next[tot]=head[u],head[u]=tot,edge[tot]=e;
ver[++tot]=u,Next[tot]=head[v],head[v]=tot,edge[tot]=e;
}
int dep[N],q[N],n,m,S,T,ans;
bool bfs(){
int l=,r=;memset(dep+,-,sizeof(int)*n);dep[q[]=S]=;
while(l<r){
int u=q[l++];
for(int i=head[u];i;i=Next[i])
if(dep[ver[i]]<&&edge[i])
dep[ver[i]]=i,q[r++]=ver[i];
}
return ~dep[T];
}
int id[N],tmp[N];
unsigned Pow=,Hash[][N];
void solve(int L,int R){
if(L==R) return;
for(int i=;i<=tot;i+=)
edge[i]=edge[i^]=;
S=id[L],T=id[R];int flow=,j;
while(bfs()){
++flow;
for(int i=T;i!=S;i=ver[j^]) --edge[j=dep[i]],++edge[j^];
}
Pow*=;
for(int i=;i<=n;++i)
if(~dep[i]) Hash[flow][i]+=Pow;
int l=L,r=R;
for(int i=L;i<=R;++i)
if(~dep[id[i]]) tmp[l++]=id[i];
else tmp[r--]=id[i];
memcpy(id+L,tmp+L,sizeof(int)*(R-L+));
solve(L,l-),solve(r+,R);
}
int main(){
//freopen("testdata.in","r",stdin);
n=read(),m=read();
for(int i=,u,v;i<=m;++i)
u=read(),v=read(),add(u,v,);
for(int i=;i<=n;++i) id[i]=i;
solve(,n);
for(int i=;i<=n;++i)
for(int j=i+;j<=n;++j)
for(int k=;k<=;++k)
if(Hash[k][i]!=Hash[k][j]) {ans+=k;break;}
printf("%d\n",ans);
return ;
}
bzoj4435: [Cerc2015]Juice Junctions(最小割树+hash)的更多相关文章
- 【BZOJ-4435】Juice Junctions 最小割树(分治+最小割)+Hash
4435: [Cerc2015]Juice Junctions Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 20 Solved: 11[Submi ...
- BZOJ4435 : [Cerc2015]Juice Junctions
最大流=最小割,而因为本题点的度数不超过3,所以最小割不超过3,EK算法的复杂度为$O(n+m)$. 通过分治求出最小割树,设$f[i][j][k]$表示最小割为$i$时,$j$点在第$k$次分治过程 ...
- BZOJ4435——[Cerc2015]Juice Junctions
0.题目大意:求两点之间的最小割之和 1.分析:很明显,最小割树,我们发现这个题并不能用n^3的方法来求答案.. 所以我们记录下所有的边,然后把边从大到小排序,然后跑一边类似kruskal的东西,顺便 ...
- BZOJ 4435 [Cerc2015]Juice Junctions 分治最小割+hash
分治最小割的题目,要求n2. 之前用的n3的方法自然不能用了. 于是用hash,设hash[i][j]表示在最小割为i的时候,j是否与S联通. 看懂这个需要理解一下最小割树的构造. 这种题建议用EK写 ...
- 【BZOJ4435】[Cerc2015]Juice Junctions Tarjan+hash
[BZOJ4435][Cerc2015]Juice Junctions Description 你被雇佣升级一个旧果汁加工厂的橙汁运输系统.系统有管道和节点构成.每条管道都是双向的,且每条管道的流量都 ...
- 【BZOJ-2229】最小割 最小割树(最大流+分治)
2229: [Zjoi2011]最小割 Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 1565 Solved: 560[Submit][Status ...
- [洛谷]P3729 曼哈顿计划EX(最小割树/等价流树)
题目大意:给出一张n个点m条边的无向图,每个点有点权,q次询问,每次给出k,要求选出若干个点点权之和不小于k,求一个最大的值x,使得选出的点中任意两点之间至少有x条互不相交的链.(n<=550, ...
- BZOJ4519[Cqoi2016]不同的最小割——最小割树+map
题目描述 学过图论的同学都知道最小割的概念:对于一个图,某个对图中结点的划分将图中所有结点分成 两个部分,如果结点s,t不在同一个部分中,则称这个划分是关于s,t的割.对于带权图来说,将 所有顶点处在 ...
- BZOJ2229[Zjoi2011]最小割——最小割树
题目描述 小白在图论课上学到了一个新的概念——最小割,下课后小白在笔记本上写下了如下这段话: “对于一个图,某个对图中结点的划分将图中所有结点分成两个部分,如果结点s,t不在同一个部分中,则称这个划分 ...
随机推荐
- C++(四)— 字符串、数字翻转3种方法
1.使用algorithm中的reverse函数,string类型字符建议使用. #include <iostream> #include <string> #include ...
- 详细的.Net并行编程高级教程--Parallel
一直觉得自己对并发了解不够深入,特别是看了<代码整洁之道>觉得自己有必要好好学学并发编程,因为性能也是衡量代码整洁的一大标准.而且在<失控>这本书中也多次提到并发,不管是计算机 ...
- Gym - 100801G: Graph (贪心+set+拓扑)(好题)
题意:给定一个N点M边的有向图,叫你加最多K条边,使得最小拓扑序最大. 思路:不是那么简单的题. 参照了别人的代码, 最后想通了. 贪心原则: 用两个单调队列维护, 第一个序列S1单增, 表示当前入 ...
- dbcc练习1
dbcc tranceon(2588,3604) dbcc ind() dbcc page()
- 发布django 程序
1.配置需求环境 pip freeze > requirements.txt 在开发环境将工程依赖的包导出. pip install virtualenv pip install virtual ...
- long long 与__int64使用总结
本文摘自网络.原文网址:http://blog.sina.com.cn/s/blog_6aa178410100vlwr.html 前言: 在16位环境下,int/unsigned int 占16位,l ...
- java.util Properties使用记录
转:http://www.2cto.com/px/201006/47834.html 在java.util 包下面有一个类 Properties,该类主要用于读取以项目的配置文件(以.properti ...
- python中报中文编码异常,Non-ASCII ,but no encoding declared
异常信息: SyntaxError: Non-ASCII character '\xe5' in file a.py on line 9, but no encoding declared; see ...
- linux日常管理-系统进程查看工具-ps
查看系统有那些进程 命令有ps aux 和命令 ps -elf USER 哪个用户使用了这个进程 PID 进程的id %CPU 占用CPU的百分比 %MEM 占用内存的百分比 VSZ 虚拟内存的大 ...
- java 正则表达式 验证邮箱
import java.util.regex.Matcher; import java.util.regex.Pattern; public class demo1 { /**java正则表达式 * ...