HDU.4700.Flow(构造 最小割树)
\(Description\)
给定\(n\)以及\(n\)个点任意两点之间的最大流,求一张无向图满足给定条件。
\(n\leq100\)。
\(Solution\)
有些类似最小割树。
我们可以构造一棵树,只要让树上的边成为割边,非树边容量为\(0\)就可以了。
每次找到当前点集中流量最小的边,设其流量为\(c\),然后根据\(c\)将点集分成两个集合,满足两个集合之间的点对的最大流是\(c\),集合内部的点的最大流\(>c\)。对于集合内部继续递归做即可。
划分集合的时候也是可以先随便找一个点\(x\)划分到左集合,将\(flow[x][i]>c\)的点\(i\)分到左集合,其余的点分到右集合,再判断一下左右集合是否满足之间的最大流\(=c\)即可。注意右集合为空时也无解(\(x\dfrac{>c}{}u\dfrac{\ c\ }{}v\dfrac{>c}{}x\),这样显然不行)。
复杂度\(O(n^3)\)?
注意\(A[i]\)别写成\(i\)。。
//93MS 1316K
#include <cstdio>
#include <cctype>
#include <cstring>
#include <algorithm>
#define gc() getchar()
typedef long long LL;
const int N=105;
int A[N],tmp[2][N],f[N][N],W[N][N];
inline int read()
{
int now=0,f=1;register char c=gc();
for(;!isdigit(c);c=='-'&&(f=-1),c=gc());
for(;isdigit(c);now=now*10+c-48,c=gc());
return now*f;
}
bool DFS(int l,int r)
{
if(l==r) return 1;
int mn=1<<30,cnt[2]={0,1}; tmp[1][1]=A[l];
for(int i=l; i<=r; ++i)
for(int j=i+1; j<=r; ++j) mn=std::min(mn,f[A[i]][A[j]]);
for(int s=A[l],i=l+1,t; i<=r; ++i) t=f[s][A[i]]>mn, tmp[t][++cnt[t]]=A[i];
if(!cnt[0]) return 0;
for(int i=1; i<=cnt[0]; ++i)
for(int j=1; j<=cnt[1]; ++j)
if(f[tmp[0][i]][tmp[1][j]]!=mn) return 0;
for(int i=l,t=1; t<=cnt[0]; ++i) A[i]=tmp[0][t++];
for(int i=l+cnt[0],t=1; i<=r; ++i) A[i]=tmp[1][t++];
W[A[l]][A[r]]=mn, W[A[r]][A[l]]=mn;
return DFS(l,l+cnt[0]-1)&&DFS(l+cnt[0],r);
}
int main()
{
int n;
while(~scanf("%d",&n))
{
memset(W,0,sizeof W);
for(int i=1; i<=n; ++i)
for(int j=1; j<=n; ++j) f[i][j]=read();
for(int i=1; i<=n; ++i) A[i]=i;
if(!DFS(1,n)) puts("NO");
else
{
puts("YES");
for(int i=1; i<=n; ++i)
for(int j=(W[i][i]=-1,1); j<=n; ++j) printf("%d%c",W[i][j]," \n"[j==n]);
}
}
return 0;
}
HDU.4700.Flow(构造 最小割树)的更多相关文章
- 最小割树(Gomory-Hu Tree)求无向图最小割详解 附 BZOJ2229,BZOJ4519题解
最小割树(Gomory-Hu Tree) 前置知识 Gomory-Hu Tree是用来解决无向图最小割的问题的,所以我们需要了解无向图最小割的定义 和有向图类似,无向图上两点(x,y)的割定义为一个边 ...
- CQOI2016 不同的最小割 (最小割树模板)(等价流树的Gusfield构造算法)
题目 最小割树模板 算法详解及证明见: 2016年国家队候选队员论文 <浅谈无向图最小割问题的一些算法及应用--绍兴一中 王文涛> 3.2节 CODE #include <bits/ ...
- 【BZOJ-2229】最小割 最小割树(最大流+分治)
2229: [Zjoi2011]最小割 Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 1565 Solved: 560[Submit][Status ...
- 【BZOJ2229】[ZJOI2011]最小割(网络流,最小割树)
[BZOJ2229][ZJOI2011]最小割(网络流,最小割树) 题面 BZOJ 洛谷 题解 戳这里 那么实现过程就是任选两点跑最小割更新答案,然后把点集划分为和\(S\)联通以及与\(T\)联通. ...
- 洛谷.4897.[模板]最小割树(Dinic)
题目链接 最小割树模板.具体见:https://www.cnblogs.com/SovietPower/p/9734013.html. ISAP不知为啥T成0分了.. Dinic: //1566ms ...
- LoibreOJ 2042. 「CQOI2016」不同的最小割 最小割树 Gomory-Hu tree
2042. 「CQOI2016」不同的最小割 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: 匿名 提交提交记录统计讨论测试数据 题目描述 ...
- 最小割(zjoi2011,bzoj2229)(最小割树)
小白在图论课上学到了一个新的概念--最小割,下课后小白在笔记本上写下了如下这段话: "对于一个图,某个对图中结点的划分将图中所有结点分成两个部分,如果结点\(s,t\)不在同一个部分中,则称 ...
- 不同的最小割(cqoi2016,bzoj4519)(最小割树)
学过图论的同学都知道最小割的概念:对于一个图,某个对图中结点的划分将图中所有结点分成 两个部分,如果结点\(s,t\)不在同一个部分中,则称这个划分是关于\(s,t\)的割.对于带权图来说,将 所有顶 ...
- [模板]最小割树(Gomory-Hu Tree)(luogu4897)
给定一个\(n\)个点\(m\)条边的无向连通图,多次询问两点之间的最小割 两点间的最小割是这样定义的:原图的每条边有一个割断它的代价,你需要用最小的代价使得这两个点不连通 Input 第一行两个数\ ...
随机推荐
- django----注意事项
不用带参数 必须要带参数:
- spring cloud 路由网关zuul的高可用
Zuul的高可用非常关键,因为外部请求到后端微服务的流量都会经过Zuul.故而在生产环境中,我们一般都需要部署高可用的Zuul以避免单点故障. 笔者分两种场景讨论Zuul的高可用. Zuul客户端也注 ...
- jenkins上节点显示swap空间不足解决方案
查看内存占用情况:free -m 1.swap分区原理: swap分区在系统的物理内存不够用的时候,把物理内存中的一部分空间释放出来,以供当前运行的程序使用.那些被释放的空间可能来自一些很长时 ...
- 该问题是需要导包!!!需要pom中添加依赖The absolute uri: http://java.sun.com/jsp/jstl/core cannot be resolved in either web.xml or the jar files deployed with this application
<!-- https://mvnrepository.com/artifact/org.apache.taglibs/taglibs-standard-impl --><depend ...
- python property的用法
用法一: class Test(object): def __init__(self): # 私有化 self.__num = 100 #名字重整_Test__num def setNum(self, ...
- spring+redis的集成,redis做缓存
1.前言 Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API.我们都知道,在日常的应用中,数据库瓶颈是最容易出现的 ...
- Lazy<T> 延迟加载
namespace ConsoleAppTest { class Program { static void Main(string[] args) { Lazy<Student> stu ...
- echarts 模拟迁徙
echarts 3 的功能貌似加了不少额 官方demo:http://echarts.baidu.com/demo.html#geo-lines 地图是基于地理地图的 百度提供了一些地图:http:/ ...
- BZOJ 3745
题解: 分治好题 首先暴力显然rmq可以做到n^2 比较容易想到是以最值分治,这样在数据随机复杂度是nlogn,不随机还是n^2的 以最值分治只有做多与较小区间复杂度相同才是nlogn的 而这题里我们 ...
- python sqlite3查看数据库所有表(table)
#coding:utf-8 import sqlite3 ''' sqlite3存在系统表sqlite_master,结构如下: sqlite_master( type TEXT, #类型: ...