洛谷P1361 小M的作物

思路:

这是一个两者取一的模型,将点集一分为二。
最小割在数值上等同于最大流。割去权值和最小的边,使图分成两部分,割下来的边权值和为最小割。
对于此题,先不考虑种在一起的情况。对于种在A,BA,BA,B两地分别能获得的ai,bia_i,b_iai​,bi​的收益,我们可以考虑从SSS向iii建一条边,权值为aia_iai​;从iii向TTT建一条边,权值为bib_ibi​。
那么种在一起获得额外收益可以建虚点j1,j2j_1,j_2j1​,j2​,由SSS向j1j_1j1​连边,权值为c1ic_{1i}c1i​,j1j_1j1​向集合中其他点连边,权值为infinfinf;对于c2ic_{2i}c2i​同理j2j_2j2​连向TTT。权值为infinfinf意味着不可割,我们只需要考虑S−>j1,j2−>TS->j_1,j_2->TS−>j1​,j2​−>T会割哪条(全部)就行了。
这题数据比较大,要采用优化的dinic才行。

代码:

#include<bits/stdc++.h>
#define pii pair<int,int>
#define ll long long
#define cl(x,y) memset(x,y,sizeof(x))
#define ct cerr<<"Time elapsed:"<<1.0*clock()/CLOCKS_PER_SEC<<"s.\n";
const int N=1e4+10;
const int mod=1e9+7;
const int maxn=0x3f3f3f3f;
const int minn=0xc0c0c0c0;
const int inf=99999999;
using namespace std;
struct edge
{int u,v,w;
}maze[4000000];
int len=1,head[N]={0},dep[N];
void add(int u,int v,int w)
{maze[++len]={head[u],v,w};head[u]=len;
}
int bfs(int s,int t)
{queue<int> q;cl(dep,0);dep[s]=1;q.push(s);while(!q.empty()){int u=q.front(),i;q.pop();for(i=head[u];i;i=maze[i].u){int v=maze[i].v,w=maze[i].w;if(w && !dep[v]){dep[v]=dep[u]+1;q.push(v);}}}return dep[t];
}
int dfs(int u,int f,int t)
{int ans=0,i;if(u==t)return f;for(i=head[u];i && f;i=maze[i].u){int v=maze[i].v,w=maze[i].w;if(dep[u]+1==dep[v] && w){int sum=dfs(v,min(f,w),t);maze[i].w-=sum;maze[i^1].w+=sum;f-=sum;ans+=sum;}}if(!ans)dep[u]=-2;return ans;
}
int dinic(int s,int t)
{int ans=0;while(bfs(s,t))ans+=dfs(s,maxn,t);return ans;
}
signed main()
{int n,m,i,x,s,t,sum=0;scanf("%d",&n);s=n+1;t=s+1;for(i=1;i<=n;i++){scanf("%d",&x);sum+=x;add(s,i,x);add(i,s,0);}for(i=1;i<=n;i++){scanf("%d",&x);sum+=x;add(i,t,x);add(t,i,0);}scanf("%d",&m);for(i=1;i<=m;i++){int ca,j,a,b;scanf("%d%d%d",&ca,&a,&b);sum+=a+b;add(s,n+2+i,a);add(n+2+i,s,0);add(n+2+i+m,t,b);add(t,n+2+i+m,0);for(j=1;j<=ca;j++){scanf("%d",&x);add(n+2+i,x,maxn);add(x,n+2+i,0);add(x,n+2+i+m,maxn);add(n+2+i+m,x,0);}}int flow=dinic(s,t);int res=sum-flow;printf("%d\n",res);return 0;
}

(最小割)洛谷P1361 小M的作物相关推荐

  1. 网络流建图方法(二)——辅助点(虚点)决策法洛谷 P1361 小M 的作物 Dinic

    inic声明:本博客默认读者会最大流最小割的定理,会Dinic, 最小割在数值上 == 最大流 但是在意义上没有任何关系,姑且可以这样求得最小割,当然可以自行百度最小割的证明定理 还是从题目开始说起 ...

  2. 洛谷 - P1361 - 小M的作物 - 最小割 - 最大权闭合子图

    第一次做最小割,不是很理解. https://www.luogu.org/problemnew/show/P1361 要把东西分进两类里,好像可以应用最小割的模板,其中一类A作为源点,另一类B作为汇点 ...

  3. 洛谷 - P1361 小M的作物(最大流最小割)

    题目链接:点击查看 题目大意:给出 n 个植物,每个植物种在 A 农场的收益是 a[ i ] ,种在 B 农场的收益是 b[ i ] ,再给出 m 组关系,每组中的所有植物如果都在 A 农场的话额外收 ...

  4. P1361 小M的作物(最小割)

    P1361 小M的作物(最小割) 比较板子的题,关键是建图. 答案就是 s u m − sum- sum−最小割. 而根据最小割最大流定理,即可求出最小割. 复习一下 Dinic 算法流程: bfs给 ...

  5. DFS(剪枝与优化) - 洛谷 P1361 - 小猫爬山

    DFS(剪枝与优化) - 洛谷 P1361 - 小猫爬山 翰翰和达达饲养了N只小猫,这天,小猫们要去爬山. 经历了千辛万苦,小猫们终于爬上了山顶,但是疲倦的它们再也不想徒步走下山了(呜咕>_&l ...

  6. 洛谷 P4430 小猴打架

    洛谷 P4430 小猴打架 题目描述 一开始森林里面有N只互不相识的小猴子,它们经常打架,但打架的双方都必须不是好朋友.每次打完架后,打架的双方以及它们的好朋友就会互相认识,成为好朋友.经过N-1次打 ...

  7. 信息学奥赛一本通 1344:【例4-4】最小花费 | 洛谷 P1576 最小花费

    [题目链接] ybt 1344:[例4-4]最小花费 洛谷 P1576 最小花费 [题目考点] 1. 图论 单源最短路径 时间复杂度: Dijkstra算法: O(V2)O(V^2)O(V2) Dij ...

  8. 2017提高组D1T1 洛谷P3951 小凯的疑惑

    洛谷P3951 小凯的疑惑 原题 题目描述 小凯手中有两种面值的金币,两种面值均为正整数且彼此互素.每种金币小凯都有 无数个.在不找零的情况下,仅凭这两种金币,有些物品他是无法准确支付的.现在小 凯想 ...

  9. 洛谷 P2186 小Z的栈函数

    洛谷 P2186 小Z的栈函数 题目 题目描述 小Z最近发现了一个神奇的机器,这个机器的所有操作都是通过维护一个栈来完成的,它支持如下11个操作: NUM X:栈顶放入X. POP:抛弃栈顶元素. I ...

最新文章

  1. 中国制造2025+互联网+,引领制造业发展
  2. 常用oracle数据库函数总结
  3. php.ini权限,php开启与关闭错误提示适用于没有修改php.ini的权限_PHP
  4. Python中用dict统计列表中元素出现的次数
  5. callbackend entry point - iwfndcl_mgw_request_manager~read_entity
  6. 7-2 最长公共子序列 (10 分)(思路加详解)
  7. 如何对一个变量数据进行正则判定_生存分析数据中的BuckleyJamesMultipleRegression Model...
  8. 关于Cortex-M3处理器内核中断异常处理机制你了解多少?
  9. spring 锁_分布式锁-快速实战
  10. 三点坐标求三角形的面积
  11. 浅谈NFC、RFID、红外、蓝牙的区别
  12. 社交网络影响力最大化基础知识总结
  13. Python实现注册账号系统密码验证模块编写
  14. html5图片任何改不透明度,如何巧改插入图片的透明度
  15. Mixly-继电器控制直流电机
  16. 数据风云、十年变迁(DTCC会议总结)
  17. 世界上最成功的 10 位 Logo 设计师
  18. TCP 与 UDP 的区别
  19. 多线程系列学习:ABA问题
  20. Ios 24小时制与12小时制

热门文章

  1. springboot + Mybatis +前端layui 项目总结(一)
  2. “松果”团队分拆出“大鱼” 小米芯片业务扩张加速
  3. NLP | 文本预处理
  4. 不论是linux系统还是windows系统你都必须具备的防火墙基本知识(内含网络安全的知识)
  5. 沈阳计算机IT专业毕业生的求职经验
  6. 分离轴定理SAT凸多边形精确碰撞检测
  7. 【arduino】DFPlayer Mini模块MP3播放全部资料
  8. 无胁科技-TVD每日漏洞情报-2022-10-10
  9. TX2+Docker
  10. python如何按列输出_pandas中的DataFrame按指定顺序输出所有列的方法