AC通道:http://www.lydsy.com/JudgeOnline/problem.php?id=3511

题目分析:

  看上去和前面的人员雇佣以及小M种田都很像。

  最小割模型来求最大值,一般都是考虑怎样构图使得满足一个组合能被表示出来,而且当满足一个组合的时候,能产生或失去所需的效益。[割掉的是不要的]

  我们将s与1相连,连为INF,这样就不会被割,n向t连边,同理。

  因为1和n会有边连接,所以我们才多建出了节点s,t。

  然后对于每个点i,s向i连wa[i],i向t连wb[i],这样就满足了第一条性质。

  对于ea,eb,ec的弄法,我们就先从s向u和向v连ea/2,从u和v向t连eb/2,然后在uv之间连一条双向的ea/2+eb/2+ec的边。

  这样连边就能满足第二条性质了,反正就是脑补一下各种割法,就发现它奥妙重重,十分正确。

  然后可以缩一下边,把s->i的边集以及i->t的合并一下[优化一下常数]。

#include<cstdio>
#include<cstring>
#include<algorithm>using namespace std;const int maxn=10010;
const int maxm=40010;
const int INF=0x3f3f3f3f;struct Node{int data,next,low;
}node[maxm*2+maxn*4];#define now node[point].data
#define www node[point].low
#define then node[point].nextint n,m,cnt;
int s,t,ans;
int wa[maxn],wb[maxn];
int stoi[maxn],itot[maxn];
int cur[maxn],head[maxn];
int dis[maxn],que[maxn];void add(int u,int v,int w){node[cnt].data=v;node[cnt].next=head[u];node[cnt].low=w;head[u]=cnt++;node[cnt].data=u;node[cnt].next=head[v];node[cnt].low=0;head[v]=cnt++;
}void add2(int u,int v,int w){node[cnt].data=v;node[cnt].next=head[u];node[cnt].low=w;head[u]=cnt++;node[cnt].data=u;node[cnt].next=head[v];node[cnt].low=w;head[v]=cnt++;
}bool BFS(){memset(dis,-1,sizeof(dis));int H=0,T=1;que[1]=s;dis[s]=0;while(H<T){H++;for(int point=head[que[H]];point!=-1;point=then)if(www && dis[now]<0){dis[now]=dis[que[H]]+1;que[++T]=now;}}return dis[t]>0;
}int dfs(int x,int low){if(x==t) return low;int Low;for(int &point=cur[x];point!=-1;point=then)if(www && dis[now]==dis[x]+1){Low=dfs(now,min(low,www));if(Low){www-=Low,node[point^1].low+=Low;return Low;}}return 0;
}int main(){
#ifndef ONLINE_JUDGEfreopen("3511.in","r",stdin);freopen("3511.out","w",stdout);
#endifint u,v,Ea,Eb,Ec;scanf("%d%d",&n,&m);t=n+1;for(int i=s;i<=t;i++) head[i]=-1;for(int i=2;i<n;i++) scanf("%d",&wa[i]),stoi[i]+=(wa[i]<<1);for(int i=2;i<n;i++) scanf("%d",&wb[i]),itot[i]+=(wb[i]<<1);for(int i=1;i<=m;i++){scanf("%d%d%d%d%d",&u,&v,&Ea,&Eb,&Ec);add2(u,v,Ea+Eb+(Ec<<1));stoi[u]+=Ea,stoi[v]+=Ea;itot[u]+=Eb,itot[v]+=Eb;}for(int i=1;i<=n;i++)ans+=stoi[i]+itot[i];stoi[1]=itot[n]=INF;for(int i=1;i<=n;i++)add(s,i,stoi[i]),add(i,t,itot[i]);int flag;while(BFS()){memcpy(cur,head,sizeof(head));while(flag=dfs(s,INF))ans-=flag;}ans>>=1;printf("%d",ans);return 0;
}

View Code

转载于:https://www.cnblogs.com/Robert-Yuan/p/5223274.html

BZOJ 3511 土地划分相关推荐

  1. BZOJ.1558.[JSOI2009]等差数列(线段树 差分)

    BZOJ 洛谷 首先可以把原序列\(A_i\)转化成差分序列\(B_i\)去做. 这样对于区间加一个等差数列\((l,r,a_0,d)\),就可以转化为\(B_{l-1}\)+=\(a_0\),\(B ...

  2. S-T平面图中利用最短路求最小割(BZOJ 1001)

    BZOJ 1001: [BeiJing2006]狼抓兔子 最小割 题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1001 现在小朋友们最喜欢 ...

  3. BZOJ 1124: [POI2008]枪战Maf(构造 + 贪心)

    题意 有 \(n\) 个人,每个人手里有一把手枪.一开始所有人都选定一个人瞄准(有可能瞄准自己).然后他们按某个顺序开枪,且任意时刻只有一个人开枪. 因此,对于不同的开枪顺序,最后死的人也不同. 问最 ...

  4. BZOJ 2957楼房重建

    传送门 线段树 //Twenty #include<cstdio> #include<cstdlib> #include<iostream> #include< ...

  5. BZOJ.5249.[九省联考2018]iiidx(贪心 线段树)

    BZOJ LOJ 洛谷 \(d_i\)不同就不用说了,建出树来\(DFS\)一遍. 对于\(d_i\)不同的情况: Solution 1: xxy tql! 考虑如何把这些数依次填到树里. 首先对于已 ...

  6. bzoj 4871: [Shoi2017]摧毁“树状图”

    4871: [Shoi2017]摧毁"树状图" Time Limit: 25 Sec  Memory Limit: 512 MB Submit: 53  Solved: 9 [Su ...

  7. BZOJ 1592. Making the Grade(思维,数据结构优化DP,以及三个拓展问题)[Usaco2008 Feb]【BZOJ计划】

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 BZOJ简单题合集x 目录 BZOJ 1592. Making the Grade 拓展问题一 拓展问 ...

  8. BZOJ 1590.Secret Message 秘密信息(Trie树) [Usaco2008 Dec]【BZOJ计划】

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 BZOJ简单题合集x Weblink https://hydro.ac/d/bzoj/p/1590 P ...

  9. BZOJ 1589 Trick or Treat on the Farm (tarjan缩点,记忆化搜索)[Usaco 2008 Dec Gold]【BZOJ计划】

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Weblink https://hydro.ac/d/bzoj/p/1589 Problem 每年万圣 ...

最新文章

  1. Fiddler 获取、安装与浏览器代理设置,Fiddler的第一次使用
  2. php连mssql 中文乱码,PHP连接MSSQL显示中文时为乱码_PHP教程
  3. 揭开知识库问答KB-QA的面纱1·简介篇
  4. C# 字符串按设置的格试在前面或后面增加空格或其它字符
  5. JS之数据类型v(** v**)v个人笔记
  6. 【转】Microsoft Cloud全新认证体系介绍
  7. python打印二进制内容_在python中打印出c类型的二进制表示
  8. 3700打印机和计算机连接,WNDR3700成功实现打印机服务器功能(刷机成WNDR3800)
  9. 微信小程序背景音乐的调试
  10. java 串行化 序列化_对象串行化 对象序列化
  11. m3u8播放器 android,在android中播放m3u8视频
  12. BUUCTF_Crytpo_robomunication
  13. BUPT计导第三次机考12.8数组+二分答案详解
  14. Spring框架的基本使用
  15. 武汉大学计算机学院樊浩南,今年高考光荣榜?谁能告之??谢谢!!
  16. AC 混合牛奶 (模拟)
  17. SSH工具连接虚拟机
  18. (用函数解决)Python报数游戏,输入有n个人按顺序编号,从第一个人报数,输入报数k,从1到k,报到k的退出游戏,从下一个人继续游戏,并求最后剩下的人编号是几号。
  19. win7的屏幕仅计算机,计算机win7双显示器的设置方法
  20. 单片机 常用名词解释

热门文章

  1. mysql怎么查看刷脏页慢_一条SQL查询语句极为缓慢,如何去优化呢
  2. 老司机找BUG指南,赶紧拿走。。
  3. C++中的函数汇总(新手必知)!
  4. 图像锐化处理算法matlab,图像锐化matlab算法
  5. alxc tool 报错数组超出了界限_代码审计之报错信息泄露与字符串截断
  6. 计算机管理技术学院,计算机管理论文,关于国家电网技术学院:管理平台有“三好”教学管理享轻松相关参考文献资料-免费论文范文...
  7. python带参数装饰器 函数名_python 全栈开发,Day11(函数名应用,闭包,装饰器初识,带参数以及带返回值的装饰器)...
  8. [渝粤教育] 广东-国家-开放大学 21秋期末考试个人与团队管理10257k2
  9. 1835财务报表分析
  10. android前台进程视频教程,Android Twilio视频通话,唤醒应用程序并进入前台