Description

Y国有N座城市,并且有M条双向公路将这些城市连接起来,并且任意两个城市至少有一条路径可以互达。 
Y国的国王去世之后,他的两个儿子A和B都想成为新的国王,但他们都想让这个国家更加安定,不会用武力解决问题。 
于是他们想将这个国家分成两个小国家A国和B国。现在,A拥有1号城市,B拥有N号城市,其他的城市还尚未确定归属哪边(划分之后的国家内部城市可以不连通)。 
由于大家都想让国家变得更好,而某些城市的人民愿意国王的A儿子作为他们的领袖,而某些城市更看好B,而为了交通的便捷,如果划分后的公路连接两个同一个国家的城市,那么更利于城市之间的交流。于是大臣们设计了一种对土地划分的评分机制,具体如下: 
1. 对于城市i,如果它划分给A国,将得到VA[i]的得分;划分给B国,将得到VB[i]的得分。 
2. 对于一条公路i,如果它连接两个A国的城市,将得到EA[i]的得分;连接两个B国的城市,将得到EB[i]的得分;否则,这条公路将失去意义,将扣除EC[i]的得分。 
现请你找到最优的土地划分,使得这种它的评分最高。

Input

第一行包含两个整数N,M,含义如问题描述所示。 
接下来一行N-2个非负整数,表示VA[2..N-1]。 
接下来一行N-2个非负整数,表示VB[2..N-1]。 
接下来M行,每行五个非负整数描述一条公路:X Y EA[i] EB[i] EC[i],含义如问题描述所示。

Output

输出有且仅有一个整数,表示最高评分。

Sample Input

3 3
8
9
1 2 2 6 2
2 3 8 5 7
1 3 9 4 1

Sample Output

11
【样例说明】
A国仅有1号点,B国有2号和3号点。
评分=VB[2]+EB[2]-EC[1]-EC[3]=9+5-2-1=11。

HINT

【数据说明】 
数据点 N M 备注 
1-2 <=20 <=200 无 
3-4 <=5000 <=10000 VA、VB、EA、EB均为0 
5-6 <=5000 <=10000 EC均为0 
7-10 <=10000 <=40000 无

保证运算过程中及最终结果不超过32位带符号整数类型的表示范围

解题思路:

二者必取其一,这个很有最小割的意思,所以相当于将A国是源点,B国为汇点

对于一个点$P_i$,设其分到A国的价值为$V_{ai}$,分到B国的价值为$V_{bi}$。

取A则无法取B,这就是最小割模型了。

那么从源点连向$P_{i}$一条有向边,容量为$V_{ai}$,那么从$P_i$向汇点一条有向边,容量为$V_{bi}$,

这样点的二选一就实现了,只需要用$\sum{V_{ai}+V_{bi}}$减去最小割就可以啦。

下面是边的三选一:(设一条边连A国城市贡献为$C_{ai}$,连B国城市贡献为$C_{bi}$,连接两个国家点惩罚为$C_{ci}$)

两个点若都选A,那么就需要割去这条边连接B国两个城市点贡献。

选A相当于割去城市选B国点贡献,那么相当于在汇点端取消了流量。

那么现在限制一下,要求其取消汇点端流量则必须取消这条边流量。

那么就相当于在原来两个城市向汇点连边处向汇点重新连边。

由于两个点都必须限制,那么相当于在两个点都向汇点连$\frac{C_{bi}}{2}$的边。

同理从源点连向边的两端点$\frac{C_{ai}}{2}$的边。

所以在答案上加上$\sum{C_{ai}+C_{bi}}$最后减去最小割。

考虑惩罚条件。

此时为边的两端一个割源,一个割汇。

此时为了保证出现割,保留与汇点连边端必须断开所有与源点连边。

所以此时最小割中一定存在$\frac{C_{ai}}{2}$,也就是这条边存在时与源点的附加边。

同理,最小割中也存在$\frac{C_{bi}}{2}$,这样割下来的代价为$\frac{C_{bi}}{2}+\frac{C_{ai}}{2}$

但是我们期望其扣除的代价为$C_{ai}+C_{bi}+C_{ci}$,这就要求我们同时要割下一条代价为$\frac{C_{bi}}{2}+\frac{C_{ai}}{2}+C_{ci}$的边。

可是这条边应该加在哪里呢。

考虑什么样的边一定被割掉,一定是当前存在的与源点连边的点连向一个与汇点有流量的点。

那么就是在当前边两端对应的点间加一双向边,边权为$\frac{C_{bi}}{2}+\frac{C_{ai}}{2}+C_{ci}$。

证明这样做的可行性。

因为当两端选同一个国家时,中间的流量不会流向汇或不会与源有流量。

所以这条附加边在两端选同一国家时是不会存在流量的,更不会被割去。

所以建图就是这样了。

因为有系数$\frac{1}{2}$的存在,将所有边权*2,最后/2,可以证明最后一定是整除的,没有必要担心。

全图最小割就好了。

代码:

 #include<queue>
#include<cstdio>
#include<cstring>
#include<algorithm>
const int oo=0x3f3f3f3f;
struct pnt{
int hd;
int lyr;
int now;
}p[];
struct ent{
int twd;
int lst;
int vls;
}e[];
int cnt;
int n,m;
int s,t;
std::queue<int>Q;
void ade(int f,int t,int v)
{
cnt++;
e[cnt].twd=t;
e[cnt].vls=v;
e[cnt].lst=p[f].hd;
p[f].hd=cnt;
return ;
}
bool Bfs(void)
{
while(!Q.empty())
Q.pop();
for(int i=;i<=t;i++)
p[i].lyr=;
p[s].lyr=;
Q.push(s);
while(!Q.empty())
{
int x=Q.front();
Q.pop();
for(int i=p[x].hd;i;i=e[i].lst)
{
int to=e[i].twd;
if(p[to].lyr==&&e[i].vls>)
{
p[to].lyr=p[x].lyr+;
if(to==t)
return true;
Q.push(to);
}
}
}
return false;
}
int Dfs(int x,int fll)
{
if(x==t)
return fll;
for(int& i=p[x].now;i;i=e[i].lst)
{
int to=e[i].twd;
if(p[to].lyr==p[x].lyr+&&e[i].vls>)
{
int ans=Dfs(to,std::min(fll,e[i].vls));
if(ans>)
{
e[i].vls-=ans;
e[((i-)^)+].vls+=ans;
return ans;
}
}
}
return ;
}
int Dinic(void)
{
int ans=;
while(Bfs())
{
for(int i=;i<=t;i++)
p[i].now=p[i].hd;
int dlt;
while(dlt=Dfs(s,oo))
ans+=dlt;
}
return ans;
}
int main()
{
// freopen("a.in","r",stdin);
scanf("%d%d",&n,&m);
s=n+;
t=s+;
int ans=;
ade(s,,oo);
ade(,s,);
ade(n,t,oo);
ade(t,n,);
for(int i=;i<=n-;i++)
{
int x;
scanf("%d",&x);
x<<=;
ade(s,i,x);
ade(i,s,);
ans+=x;
}
for(int i=;i<=n-;i++)
{
int x;
scanf("%d",&x);
x<<=;
ade(i,t,x);
ade(t,i,);
ans+=x;
}
for(int i=;i<=m;i++)
{
int x,y,a,b,c;
scanf("%d%d%d%d%d",&x,&y,&a,&b,&c);
ans+=a+b+a+b;
ade(s,x,a);
ade(x,s,);
ade(s,y,a);
ade(y,s,);
ade(x,t,b);
ade(t,x,);
ade(y,t,b);
ade(t,y,);
ade(x,y,a+b+c+c);
ade(y,x,a+b+c+c);
}
ans=(ans-Dinic())>>;
printf("%d\n",ans);
return ;
}

BZOJ3511: 土地划分(最小割)的更多相关文章

  1. UVa1515 Pool construction(最小割)

    题目 Source https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_pr ...

  2. BZOJ3511: 土地划分

    [传送门:BZOJ3511] 简要题意: 给出n个点,m条边,每个点有A和B两种形态,一开始1为A,n为B 给出VA[i]和VB[i],表示第i个点选择A和B形态的价值 每条边给出x,y,EA,EB, ...

  3. BZOJ 1391: [Ceoi2008]order [最小割]

    1391: [Ceoi2008]order Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 1509  Solved: 460[Submit][Statu ...

  4. BZOJ-2127-happiness(最小割)

    2127: happiness(题解) Time Limit: 51 Sec  Memory Limit: 259 MBSubmit: 1806  Solved: 875 Description 高一 ...

  5. BZOJ-2561-最小生成树 题解(最小割)

    2561: 最小生成树(题解) Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1628  Solved: 786 传送门:http://www.lyd ...

  6. BZOJ3438 小M的作物(最小割)

    题目 Source http://www.lydsy.com/JudgeOnline/problem.php?id=3438 Description 小M在MC里开辟了两块巨大的耕地A和B(你可以认为 ...

  7. 最大流-最小割 MAXFLOW-MINCUT ISAP

    简单的叙述就不必了. 对于一个图,我们要找最大流,对于基于增广路径的算法,首先必须要建立反向边. 反向边的正确性: 我努力查找了许多资料,都没有找到理论上关于反向边正确性的证明. 但事实上,我们不难理 ...

  8. bzoj1412最小割

    太羞耻了,m n写反了(主要是样例n m相等) 建图方法比较高(ji)端(chu),对于可以加栅栏的地方连上1的边,然后求最小割即可 为了让代码优(suo)美(duan),我写了一个check,避免多 ...

  9. 【BZOJ1497】[NOI2006]最大获利 最小割

    裸的最小割,很经典的模型. 建图:要求总收益-总成本最大,那么将每条弧与源点相连,流量为成本,每个收益与汇点相连,流量为收益,然后每条弧与它所能到达的收益相连,流量为inf. 与源点相连的是未被选中的 ...

随机推荐

  1. 51Nod 最长的循环节(打表预处理)

    正整数k的倒数1/k,写为10进制的小数如果为无限循环小数,则存在一个循环节,求<=n的数中,倒数循环节长度最长的那个数,假如存在多个最优的答案,输出所有答案中最大的那个数.     1/6= ...

  2. Debian9.5下sftp配置和scp用法

    基于 ssh 的 sftp 服务相比 ftp 有更好的安全性(非明文帐号密码传输)和方便的权限管理(限制用户的活动目录). 1.如果只想让某些用户只能使用 sftp 操作文件, 而不能通过ssh进行服 ...

  3. XAMPP添加多个站点之httpd-vhosts.conf 设置

    1.在xampp\apache\conf\httpd.conf设置路径DocumentRoot和Directory 必须与xampp\apache\conf\extra\httpd-vhosts.co ...

  4. 洛谷3857 [TJOI2008]彩灯

    题目描述 已知一组彩灯是由一排N个独立的灯泡构成的,并且有M个开关控制它们.从数学的角度看,这一排彩灯的任何一个彩灯只有亮与不亮两个状态,所以共有2N个样式.由于技术上的问题,Peter设计的每个开关 ...

  5. CSS动画框架Loaders.css +animate.css

    CSS加载动画框架Loaders.css 是一款非常出色的加载动画框架,Loaders.css利用纯CSS可以实现很多种样式的Loading加载动画,这些动画并不需要图片来辅助,而是仅仅需要CSS即可 ...

  6. php 安装rabtmq amqp 扩展

    php 安装 rabbitmq-c-0.9.0 扩展 安装 ibrabbitmq-c github 仓库地址https://github.com/alanxz/rab... ``` 安装过程如果报错 ...

  7. caioj 1067动态规划入门(一维一边推5: 乘积最大(高精度版))

    因为这里涉及到乘号的个数,那么我们可以用f[i][j]表示前i个位乘号为j个时的最大乘积 那么相比上一题就是多了一层枚举多少个乘号的循环,可以得出 f[i][r] = max(f[j - 1][r - ...

  8. oracle基础入门(四)

    一:其实oracle的语法跟sql servce 挺像的只有一些个别的差异而已 1):安装Oracle的数据库一般它的表中会自带了两站表: 是 emp(员工表) , dept(部门) 单表查询 sel ...

  9. 【Henu ACM Round#20 F】 Arthur and Brackets

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 所给的li,ri是左括号从左到右的顺序给的. (且注意长度是2*n 现在我们先把第一个左括号放在第1个位置. 然后考虑第二个位置. ...

  10. ECNUOJ 2575 Separate Connections

    Separate Connections Time Limit:5000MS Memory Limit:65536KBTotal Submit:421 Accepted:41 Description  ...