不同的最小割 bzoj-4519 Cqoi-2016

题目大意题目链接

注释:略。


想法

我们发现这和最小割那题比较像。

我们依然通过那个题说的办法一样,构建最小割树即可。

接下来就是随便怎么处理都行了。

我们可以弄一个数组把枚举到的距离都记录下来即可。

Code

#include <bits/stdc++.h>
#define N 860
#define M 17010
using namespace std;
queue<int> q;
int n,head[N],to[M],val[M],next[M],tot=1,s,t,dis[N],a[N],tmp[N],ans[N][N],v[1000000],tot;
inline void add(int x,int y,int z)
{
to[++tot]=y,val[tot]=z,next[tot]=head[x],head[x]=tot;
to[++tot]=x,val[tot]=z,next[tot]=head[y],head[y]=tot;
}
bool bfs()
{
int x,i;
memset(dis,0,sizeof(dis));
while(!q.empty()) q.pop();
dis[s]=1,q.push(s);
while(!q.empty())
{
x=q.front(),q.pop();
for(i=head[x];i;i=next[i])
{
if(val[i]&&!dis[to[i]])
{
dis[to[i]]=dis[x]+1;
if(to[i]==t) return 1;
q.push(to[i]);
}
}
}
return 0;
}
int dinic(int x,int low)
{
if(x==t) return low;
int temp=low,i,k;
for(i=head[x];i;i=next[i])
{
if(val[i]&&dis[to[i]]==dis[x]+1)
{
k=dinic(to[i],min(temp,val[i]));
if(!k) dis[to[i]]=0;
val[i]-=k,val[i^1]+=k;
if(!(temp-=k)) break;
}
}
return low-temp;
}
void solve(int l,int r)
{
if(l >= r) return;
int i,j,sum=0,p1,p2;
for(i=2;i <= tot;i+=2) val[i]=val[i^1]=(val[i]+val[i^1]) >> 1;
s=a[l],t=a[r];
while(bfs()) sum+=dinic(s,1<<30);
for(i=1;i <= n;i++)
if(dis[i])
for(j=1;j <= n;j++)
if(!dis[j])
ans[i][j]=ans[j][i]=min(ans[i][j],sum);
for(p1=i=l,p2=r;i <= r;i++)
{
if(dis[a[i]]) tmp[p1++]=a[i];
else tmp[p2--]=a[i];
}
for(i=l;i <= r;i++) a[i]=tmp[i];
solve(l,p2),solve(p1,r);
}
int main()
{
int m,i,j,x,y,z,ret=0;
scanf("%d%d",&n,&m);
while(m--) scanf("%d%d%d",&x,&y,&z),add(x,y,z);
for(i=1;i <= n;i++) a[i]=i;
memset(ans,0x7f,sizeof(ans)),solve(1,n);
for(i=1;i <= n;i++)
for(j=i+1;j <= n;j++)
v[++tot]=ans[i][j];
sort(v+1,v+tot+1);
v[0]=-1<<30;
for(i=1;i <= tot;i++)
if(v[i] != v[i-1])
ret++;
printf("%d\n",ret);
return 0;
}

小结:最小割树的应用我就碰见了这么两道题。

[bzoj4519][Cqoi2016]不同的最小割_网络流_最小割_最小割树的更多相关文章

  1. ACM/ICPC 之 最小割转网络流(POJ3469)

    重点:构图 //最小割转网络流 //邻接表+Dinic //Time:5797Ms Memory:6192K #include<iostream> #include<cstring& ...

  2. 【BZOJ2229】[ZJOI2011]最小割(网络流,最小割树)

    [BZOJ2229][ZJOI2011]最小割(网络流,最小割树) 题面 BZOJ 洛谷 题解 戳这里 那么实现过程就是任选两点跑最小割更新答案,然后把点集划分为和\(S\)联通以及与\(T\)联通. ...

  3. UVA 10480 Sabotage (网络流,最大流,最小割)

    UVA 10480 Sabotage (网络流,最大流,最小割) Description The regime of a small but wealthy dictatorship has been ...

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

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

  5. 【bzoj2229】[Zjoi2011]最小割 分治+网络流最小割

    题目描述 小白在图论课上学到了一个新的概念——最小割,下课后小白在笔记本上写下了如下这段话: “对于一个图,某个对图中结点的划分将图中所有结点分成两个部分,如果结点s,t不在同一个部分中,则称这个划分 ...

  6. 【Loj117】有源汇上下界最小流(网络流)

    [Loj117]有源汇上下界最小流(网络流) 题面 Loj 题解 还是模板题. #include<iostream> #include<cstdio> #include< ...

  7. BZOJ_3550_[ONTAK2010]Vacation&&BZOJ_1283:_序列_网络流解线性规划

    BZOJ_3550_[ONTAK2010]Vacation&&BZOJ_1283:_序列_网络流解线性规划 Description 给出一个长度为 的正整数序列Ci,求一个子序列,使得 ...

  8. POJ 3469(Dual Core CPU-最小割)[Template:网络流dinic V2]

    Language: Default Dual Core CPU Time Limit: 15000MS   Memory Limit: 131072K Total Submissions: 19321 ...

  9. 【BZOJ-2502】清理雪道 有上下界的网络流(有下界的最小流)

    2502: 清理雪道 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 594  Solved: 318[Submit][Status][Discuss] ...

随机推荐

  1. 【RSA】在 ASP.NET Core中结合web前端JsEncrypt.JS使用公钥加密,.NET Core使用私钥解密;

    有一个需求,前端web使用的是JsEncrypt把后端给的公钥对密码进行加密,然后后端对其进行解密: 使用的类库如下: 后端使用第三方开源类库Bouncy Castle进行RSA的加解密和生成PEM格 ...

  2. vue项目开发前的es6的知识储备

    let命令 学习笔记 1.let所声明的变量,只在let命令所在的代码块内有效. 2.不存在变量提升:所声明的变量一定要在声明后使用,否则报错. 一定要先声明,再去使用.let x=x;这样就是错误的 ...

  3. iOS Programming Controlling Animations 动画

    iOS Programming Controlling Animations 动画 The word "animation" is derived from a Latin wor ...

  4. CAS server 连接mysql的deployerConfigContext.xml配置

    1.deployerConfigContext.xml配置 <?xml version="1.0" encoding="UTF-8"?> <b ...

  5. Linux 时间同步 ntpdate

    ntpdate 使用网络计时协议(NTP)设置日期和时间.此命令仅应用于 AIX 4.2 或后期版本. 语法: ntpdate [ -b] [ -d] [ -s] [ -u] [ -aKeyid] [ ...

  6. node.js入门之三

    Node.js REPL(交互式解释器) Node.js REPL(Read Eval Print Loop:交互式解释器) 表示一个电脑的环境,类似 Window 系统的终端或 Unix/Linux ...

  7. PHP会话控制考察点

    为什么要使用会话控制技术 HTTP协议是无状态的,也就是说HTTP没有一个内建的机制来维护两个事务之间的状态.当一个用户完成一个请求发起第二个请求的时候,服务器无法知道这次请求是来自于上一次的客户.而 ...

  8. 在mac下做web开发,shell常用的快捷键

    Ctrl + A 光标移动到行首 Ctrl + E 光标移动到行末 Ctrl + K 清屏(也可是用clear命令) Command +shift+{} 终端的tab左右切换

  9. 2019年,Linux运维行业的趋势,跟不上学习就被淘汰

    运维行业经历了多年的发展,已经有了很大的变化,最开始的机房.网线.人肉,到现在一步步的自动化.智能化.容器化,运维人员的职业技能要求越来越高,稍不注意就可能被淘汰. 今天马小哥就来盘点一下2019年运 ...

  10. No-1.第一个 Python 程序

    1. 第一个 HelloWorld 程序 1.1 Python 源程序的基本概念 Python 源程序就是一个特殊格式的文本文件,可以使用任意文本编辑软件做 Python 的开发 Python 程序的 ...