bzoj千题计划139:bzoj2229: [Zjoi2011]最小割
http://www.lydsy.com/JudgeOnline/problem.php?id=2229
最小割树介绍:http://blog.csdn.net/jyxjyx27/article/details/42750833
http://blog.csdn.net/miaomiao_ymxl/article/details/54931876
#include<queue>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm> using namespace std; #define N 200
#define M 7000
const int inf=2e9; int n; int tot;
int front[N],nxt[M<<],to[M<<],val[M<<],from[M<<];
int lev[N],num[N];
int path[N];
int cur[N]; int src,decc; int a[N],tmp[N];
bool use[N]; int dis[N][N]; void read(int &x)
{
x=; char c=getchar();
while(!isdigit(c)) c=getchar();
while(isdigit(c)) { x=x*+c-''; c=getchar(); }
} void add(int u,int v,int w)
{
to[++tot]=v; nxt[tot]=front[u]; front[u]=tot; from[tot]=u; val[tot]=w;
//to[++tot]=u; nxt[tot]=front[v]; front[v]=tot; from[tot]=v; val[tot]=0;
} bool bfs()
{
queue<int>q;
for(int i=;i<=n;++i) lev[i]=n;
q.push(decc);
lev[decc]=;
int now,t;
while(!q.empty())
{
now=q.front();
q.pop();
for(int i=front[now];i;i=nxt[i])
{
t=to[i];
if(lev[t]==n && val[i^])
{
lev[t]=lev[now]+;
q.push(t);
}
}
}
return lev[src]!=n;
} int augment()
{
int now=decc,flow=inf;
int i;
while(now!=src)
{
i=path[now];
flow=min(flow,val[i]);
now=from[i];
}
now=decc;
while(now!=src)
{
i=path[now];
val[i]-=flow;
val[i^]+=flow;
now=from[i];
}
return flow;
} int isap()
{
int flow=;
if(!bfs()) return ;
memset(num,,sizeof(num));
for(int i=;i<=n;++i) num[lev[i]]++,cur[i]=front[i];
int now=src,t;
while(lev[src]<n)
{
if(now==decc)
{
flow+=augment();
now=src;
}
bool advanced=false;
for(int i=cur[now];i;i=nxt[i])
{
t=to[i];
if(lev[t]==lev[now]- && val[i])
{
advanced=true;
path[t]=i;
cur[now]=i;
now=t;
break;
}
}
if(!advanced)
{
int mi=n;
for(int i=front[now];i;i=nxt[i])
if(val[i]) mi=min(mi,lev[to[i]]);
if(!--num[lev[now]]) break;
num[lev[now]=mi+]++;
cur[now]=front[now];
if(now!=src) now=from[path[now]];
}
}
return flow;
} void dfs(int x)
{
use[x]=true;
for(int i=front[x];i;i=nxt[i])
if(!use[to[i]] && val[i]) dfs(to[i]);
} void solve(int l,int r)
{
if(l>=r) return;
src=a[l]; decc=a[r];
for(int i=;i<=tot;i+=) val[i]=val[i+]=val[i]+val[i+]>>;
int flow=isap();
// printf("%d %d %d\n",l,r,flow);
memset(use,false,sizeof(use));
dfs(src);
for(int i=;i<=n;++i)
if(use[i])
for(int j=;j<=n;++j)
if(!use[j])
dis[i][j]=dis[j][i]=min(dis[i][j],flow);
int i=l,j=r;
for(int k=l;k<=r;++k)
if(use[a[k]]) tmp[i++]=a[k];
else tmp[j--]=a[k];
for(int k=l;k<=r;++k) a[k]=tmp[k];
solve(l,i-);
solve(j+,r);
} int main()
{
// freopen("mincuto.in","r",stdin);
// freopen("mincuto.out","w",stdout);
int T;
read(T);
int m,q;
int u,v,w,x;
int ans;
while(T--)
{
tot=;
memset(front,,sizeof(front));
memset(dis,,sizeof(dis));
read(n); read(m);
for(int i=;i<=n;++i) a[i]=i;
while(m--)
{
read(u); read(v); read(w);
add(u,v,w);
add(v,u,w);
}
solve(,n);
read(q);
while(q--)
{
ans=;
read(x);
for(int i=;i<=n;++i)
for(int j=i+;j<=n;++j)
if(dis[i][j]<=x) ans++;
cout<<ans<<'\n';
}
cout<<'\n';
}
return ;
}
2229: [Zjoi2011]最小割
Time Limit: 10 Sec  Memory Limit: 259 MB
Submit: 2429  Solved: 863
[Submit][Status][Discuss]
Description
小白在图论课上学到了一个新的概念——最小割,下课后小白在笔记本上写下了如下这段话: “对于一个图,某个对图中结点的划分将图中所有结点分成两个部分,如果结点s,t不在同一个部分中,则称这个划分是关于s,t的割。 对于带权图来说,将所有顶点处在不同部分的边的权值相加所得到的值定义为这个割的容量,而s,t的最小割指的是在关于s,t的割中容量最小的割” 现给定一张无向图,小白有若干个形如“图中有多少对点它们的最小割的容量不超过x呢”的疑问,小蓝虽然很想回答这些问题,但小蓝最近忙着挖木块,于是作为仍然是小蓝的好友,你又有任务了。
Input
输入文件第一行有且只有一个正整数T,表示测试数据的组数。 对于每组测试数据, 第一行包含两个整数n,m,表示图的点数和边数。 下面m行,每行3个正整数u,v,c(1<=u,v<=n,0<=c<=106),表示有一条权为c的无向边(u,v) 接下来一行,包含一个整数q,表示询问的个数 下面q行,每行一个整数x,其含义同题目描述。
Output
对于每组测试数据,输出应包括q行,第i行表示第i个问题的答案。对于点对(p,q)和(q,p),只统计一次(见样例)。
两组测试数据之间用空行隔开。
Sample Input
5 0
1
0
Sample Output
【数据范围】
对于100%的数据  T<=10,n<=150,m<=3000,q<=30,x在32位有符号整数类型范围内。
    图中两个点之间可能有多条边
bzoj千题计划139:bzoj2229: [Zjoi2011]最小割的更多相关文章
- BZOJ2229: [Zjoi2011]最小割
		
题解: 真是一道神题!!! 大家还是围观JZP的题解吧(网址找不到了...) 代码: #include<cstdio> #include<cstdlib> #include&l ...
 - bzoj2229: [Zjoi2011]最小割(最小割树)
		
传送门 这题是用最小割树做的(不明白最小割树是什么的可以去看看这一题->这里) 有了最小割树就很简单了……点数那么少……每次跑出一个最大流就暴力搞一遍就好了 //minamoto #includ ...
 - bzoj2229: [Zjoi2011]最小割(分治最小割+最小割树思想)
		
2229: [Zjoi2011]最小割 题目:传送门 题解: 一道非常好的题目啊!!! 蒟蒻的想法:暴力枚举点对跑最小割记录...绝对爆炸啊.... 开始怀疑是不是题目骗人...难道根本不用网络流?? ...
 - bzoj千题计划322:bzoj2561: 最小生成树(最小割)
		
https://www.lydsy.com/JudgeOnline/problem.php?id=2561 考虑Kruscal算法求最小生成树的流程 如果 u和v之间的长为L的边能出现在最小生成树里, ...
 - bzoj千题计划140:bzoj4519: [Cqoi2016]不同的最小割
		
http://www.lydsy.com/JudgeOnline/problem.php?id=4519 最小割树 #include<queue> #include<cstdio&g ...
 - bzoj千题计划300:bzoj4823: [Cqoi2017]老C的方块
		
http://www.lydsy.com/JudgeOnline/problem.php?id=4823 讨厌的形状就是四联通图 且左右各连一个方块 那么破坏所有满足条件的四联通就好了 按上图方式染色 ...
 - bzoj千题计划141:bzoj3532: [Sdoi2014]Lis
		
http://www.lydsy.com/JudgeOnline/problem.php?id=3532 如果没有字典序的限制,那么DP拆点最小割即可 加上字典序的限制: 按c从小到大枚举最小割边集中 ...
 - bzoj千题计划129:bzoj2007: [Noi2010]海拔
		
http://www.lydsy.com/JudgeOnline/problem.php?id=2007 1.所有点的高度一定在0~1之间, 如果有一个点的高度超过了1,那么必定会有人先上坡,再下坡, ...
 - [bzoj2229][Zjoi2011]最小割_网络流_最小割树
		
最小割 bzoj-2229 Zjoi-2011 题目大意:题目链接. 注释:略. 想法: 在这里给出最小割树的定义. 最小割树啊,就是这样一棵树.一个图的最小割树满足这棵树上任意两点之间的最小值就是原 ...
 
随机推荐
- HDU 4026 Unlock the Cell Phone 状压dp(类似TSP)
			
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4026 Unlock the Cell Phone Time Limit: 6000/3000 MS ...
 - <mvc:annotation-driven/>的作用
			
<mvc:annotation-driven>的作用是: 会自动注册DefaultAnnotationHandlerMapping与AnnotationMethodHandlerAdapt ...
 - Alpha阶段敏捷冲刺⑥
			
1.提供当天站立式会议照片一张. 每个人的工作 (有work item 的ID),并将其记录在码云项目管理中: 昨天已完成的工作. 实现对账单条目的编辑 初步设计设置页面 今天要完成的工作. 账单明细 ...
 - area point sql
			
UPDATE aa_info_area t,(SELECT areaId, areacenter,CONCAT('POINT(' ,substring_index(areacenter,',', 1) ...
 - SpringBoot(六)_AOP统一处理请求
			
什么是AOP AOP 是一种编程范式,与编程语言无关: 将通用逻辑从业务逻辑中分离出来(假如你的业务是一条线,我们不在业务线上写一行代码就能完成附加任务!我们会把代码写在其他的地方): 具体实现 (1 ...
 - toast components
			
toast components https://jossmac.github.io/react-toast-notifications/ https://docs.microsoft.com/en- ...
 - 计算机网络【10】—— Cookie与Session
			
一.cookie 和session 的区别 a.cookie数据存放在客户的浏览器上,session数据放在服务器上. b.cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKI ...
 - python3 执行AES加密方法
			
cmd执行命令:pip install pycryptodome # -*- coding: utf-8 -*- # __author__ = 'Carry' import base64 from C ...
 - SPOJ NETADMIN_Smart Network Administrator
			
给一个图,某些点需要单独以某一种颜色的线连接到1点,问如何安排能够使得整个图颜色最多的一条路颜色最少. 显然,二分枚举然后加以颜色其实就是流量了,相当于对每条边限定一个当前二分的流量值,判断能否满流即 ...
 - Django 2.0 学习(21):Django Session
			
Django Session Session 与Cookie 1.简介 1.Cookie不属于http协议范围,由于http协议无法保持状态,但实际情况,我们又需要"保持状态",因 ...