BZOJ 3511 土地划分
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 土地划分相关推荐
- BZOJ.1558.[JSOI2009]等差数列(线段树 差分)
BZOJ 洛谷 首先可以把原序列\(A_i\)转化成差分序列\(B_i\)去做. 这样对于区间加一个等差数列\((l,r,a_0,d)\),就可以转化为\(B_{l-1}\)+=\(a_0\),\(B ...
- S-T平面图中利用最短路求最小割(BZOJ 1001)
BZOJ 1001: [BeiJing2006]狼抓兔子 最小割 题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1001 现在小朋友们最喜欢 ...
- BZOJ 1124: [POI2008]枪战Maf(构造 + 贪心)
题意 有 \(n\) 个人,每个人手里有一把手枪.一开始所有人都选定一个人瞄准(有可能瞄准自己).然后他们按某个顺序开枪,且任意时刻只有一个人开枪. 因此,对于不同的开枪顺序,最后死的人也不同. 问最 ...
- BZOJ 2957楼房重建
传送门 线段树 //Twenty #include<cstdio> #include<cstdlib> #include<iostream> #include< ...
- BZOJ.5249.[九省联考2018]iiidx(贪心 线段树)
BZOJ LOJ 洛谷 \(d_i\)不同就不用说了,建出树来\(DFS\)一遍. 对于\(d_i\)不同的情况: Solution 1: xxy tql! 考虑如何把这些数依次填到树里. 首先对于已 ...
- bzoj 4871: [Shoi2017]摧毁“树状图”
4871: [Shoi2017]摧毁"树状图" Time Limit: 25 Sec Memory Limit: 512 MB Submit: 53 Solved: 9 [Su ...
- BZOJ 1592. Making the Grade(思维,数据结构优化DP,以及三个拓展问题)[Usaco2008 Feb]【BZOJ计划】
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 BZOJ简单题合集x 目录 BZOJ 1592. Making the Grade 拓展问题一 拓展问 ...
- BZOJ 1590.Secret Message 秘密信息(Trie树) [Usaco2008 Dec]【BZOJ计划】
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 BZOJ简单题合集x Weblink https://hydro.ac/d/bzoj/p/1590 P ...
- BZOJ 1589 Trick or Treat on the Farm (tarjan缩点,记忆化搜索)[Usaco 2008 Dec Gold]【BZOJ计划】
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Weblink https://hydro.ac/d/bzoj/p/1589 Problem 每年万圣 ...
最新文章
- Fiddler 获取、安装与浏览器代理设置,Fiddler的第一次使用
- php连mssql 中文乱码,PHP连接MSSQL显示中文时为乱码_PHP教程
- 揭开知识库问答KB-QA的面纱1·简介篇
- C# 字符串按设置的格试在前面或后面增加空格或其它字符
- JS之数据类型v(** v**)v个人笔记
- 【转】Microsoft Cloud全新认证体系介绍
- python打印二进制内容_在python中打印出c类型的二进制表示
- 3700打印机和计算机连接,WNDR3700成功实现打印机服务器功能(刷机成WNDR3800)
- 微信小程序背景音乐的调试
- java 串行化 序列化_对象串行化 对象序列化
- m3u8播放器 android,在android中播放m3u8视频
- BUUCTF_Crytpo_robomunication
- BUPT计导第三次机考12.8数组+二分答案详解
- Spring框架的基本使用
- 武汉大学计算机学院樊浩南,今年高考光荣榜?谁能告之??谢谢!!
- AC 混合牛奶 (模拟)
- SSH工具连接虚拟机
- (用函数解决)Python报数游戏,输入有n个人按顺序编号,从第一个人报数,输入报数k,从1到k,报到k的退出游戏,从下一个人继续游戏,并求最后剩下的人编号是几号。
- win7的屏幕仅计算机,计算机win7双显示器的设置方法
- 单片机 常用名词解释
热门文章
- mysql怎么查看刷脏页慢_一条SQL查询语句极为缓慢,如何去优化呢
- 老司机找BUG指南,赶紧拿走。。
- C++中的函数汇总(新手必知)!
- 图像锐化处理算法matlab,图像锐化matlab算法
- alxc tool 报错数组超出了界限_代码审计之报错信息泄露与字符串截断
- 计算机管理技术学院,计算机管理论文,关于国家电网技术学院:管理平台有“三好”教学管理享轻松相关参考文献资料-免费论文范文...
- python带参数装饰器 函数名_python 全栈开发,Day11(函数名应用,闭包,装饰器初识,带参数以及带返回值的装饰器)...
- [渝粤教育] 广东-国家-开放大学 21秋期末考试个人与团队管理10257k2
- 1835财务报表分析
- android前台进程视频教程,Android Twilio视频通话,唤醒应用程序并进入前台