flow

师范大学の矿山

故事扮演 提交于 2019-11-27 16:42:42
师范大学の矿山 Time Limit: 1000/2000 MS (C++/Others) Memory Limit: 262144 /524288K (C++/Others) 题目描述 # 师范大学有一座矿山,因为改造江边学生公寓需要花费大量资金,所以现在让你负 责挖矿,你需要根据矿石(以下称石头)的属性来计算它能获得的最大利润。 每一块石头 有一个价值 和挖掘的成本 ,有些石头会阻挡其他石头,比如,如 果石头 被石头 和石头 挡住,那么必须先把石头 和石头 挖出来,才能挖石头 ,当一块石头没有被其他石头阻挡时,它就可以被挖出来。 输入描述 # 第一行一个整数 ,代表石头的数量,石头编号从 到 ,接下来 行描述这些 石头的属性。第 行代表石头 ,首先是两个数 和 代表价值和成本,然后第三 个数 表示石头 阻挡的石头数量,最后是 个数 表示石头 阻挡的那些石头的 编号。 输入保证有合理的挖掘顺序来挖掘每一块石头,所有石头的 之和不会超过500。 输出描述 #1<=N<=200,0<=vi,ci<=200,0<=mi<=N-1 输出一个整数代表挖掘这些石头能获取的最大利润。 输入 5 0 3 2 2 3 1 3 2 4 5 4 8 1 4 5 3 0 9 2 0 输出 2 题解:先把所有能获利 的点都加起来,再建图(从源点到获利的点连边,权值为获利值,把赔钱的点到汇点连边

Luogu P4014 分配问题 题解

孤街醉人 提交于 2019-11-27 16:28:07
闲扯 蒟蒻的第一道自己想出怎么建图的题!! 虽然是一个没什么技术含量的图 想了想,还是写篇题解纪念一下。 题面 题面 Solution 要求最小费用和最大费用,同时限制了流量,考虑费用流。 虚拟一个超级源点,从这个点分别向 \(N\) 个任务连一条流量为 \(1\) ,费用为 \(0\) 的边。 虚拟一个超级汇点,才从 \(N\) 个物品分别向该点连一条流量为 \(1\) ,费用为 \(0\) 的边。 因为每个人只能做一件,且每个工作只能做一次,所以连的边流量都为一。而第 \(i\) 个人做第 \(j\) 个任务获得的贡献为 \(val_{i,j}\) ,所以从第 \(j\) 个物品向第 \(i\) 个人连一条费用为 \(val_{i,j}\) 的边。 如果是求最小费用最大流,那么直接跑模板。 如果是求最大费用最大流,只需要连边时将费用换为负数,求一个最小费用最大流,然后答案再取一个相反数即可。(这个处理好秒啊,自己没想出来,还是看了题解) Code #include<bits/stdc++.h> #define del(a,i) memset(a,i,sizeof(a)) #define ll long long #define inl inline #define il inl void #define it inl int #define ill inl ll #define

ACM-ICPC 2018 沈阳赛区网络预赛 F. Fantastic Graph (有源汇上下界网络流板子)

♀尐吖头ヾ 提交于 2019-11-27 15:53:48
板子题 给你一张二分图,一边n个点,另一边m个点,k条边,问你能不能通过删边,使得所有点的度数都在[L,R] #include<bits/stdc++.h> #define FIN freopen("input.txt","r",stdin) #define ll long long #define mod 1000000007 #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 #define inf 0x3f3f3f3f #define INF 0x3f3f3f3f3f3f3f3f const int maxn = 100005; using namespace std; int cnt,s,t,n,m,k; int head[maxn],Next[maxn*20],to[maxn*20]; int flow[maxn*20],dep[maxn],cur[maxn],mp[405][405]; int dir[8][2]={1,2,1,-2,-1,2,-1,-2,-2,-1,-2,1,2,1,2,-1}; inline void add(int u,int v,int w){ Next[cnt]=head[u]; head[u]=cnt; to[cnt]=v; flow[cnt++]=w; Next[cnt]=head[v];

网络流强化-HDU2732

孤人 提交于 2019-11-27 15:12:02
  第一次遇到加了“多余”的边会导致WA的——在我看来是很多余,见代码191行   之后会思考为什么,想出来再更。    //http://www.renfei.org/blog/isap.html 带解释的 //https://www.cnblogs.com/bosswnx/p/10353301.html 形式和我的比较相近的 #include<cstdio> #include<cstring> #include<cmath> using namespace std; #define maxe 100024 //pay 双向边 一共10万条路 双向就是20万 反边就是40万 #define maxv 1024 //pay #define maxn 25 //pay #define sc scanf #define pt printf #define rep(i,a,b) for(int i=(a);i<(b);++i) const int inf = 0x3f3f3f3f; int cg,sp,ins; //cg change sp是总流量 ins是加速回溯点 int N,M,T,D ,s,t,delta; int q[maxv],fro,rea; typedef struct ed{ int v,nxt,cap; //dis }ed; ed e[maxe]; int tot

HYSBZ 1797 Mincut 最小割

守給你的承諾、 提交于 2019-11-27 13:42:39
Descrption A,B两个国家正在交战,其中A国的物资运输网中有N个中转站,M条单向道路。设其中第i (1≤i≤M)条道路连接了vi,ui两个中转站,那么中转站vi可以通过该道路到达ui中转站,如果切断这条道路,需要代价ci。现在B国想找出一个路径切断方案,使中转站s不能到达中转站t,并且切断路径的代价之和最小。 小可可一眼就看出,这是一个求最小割的问题。但爱思考的小可可并不局限于此。现在他对每条单向道路提出两个问题: 问题一:是否存在一个最小代价路径切断方案,其中该道路被切断? 问题二:是否对任何一个最小代价路径切断方案,都有该道路被切断? 现在请你回答这两个问题。 Input 第一行有4个正整数,依次为N,M,s和t。第2行到第(M+1)行每行3个正 整数v,u,c表示v中转站到u中转站之间有单向道路相连,单向道路的起点是v, 终点是u,切断它的代价是c(1≤c≤100000)。 注意:两个中转站之间可能有多条道路直接相连。 同一行相邻两数之间可能有一个或多个空格。 Output 对每条单向边,按输入顺序,依次输出一行,包含两个非0即1的整数,分 别表示对问题一和问题二的回答(其中输出1表示是,输出0表示否)。 同一行相邻两数之间用一个空格隔开,每行开头和末尾没有多余空格。 Sample Input 6 7 1 6 1 2 3 1 3 2 2 4 4 2 5 1 3 5

2019 SDN上机第4次作业

☆樱花仙子☆ 提交于 2019-11-27 13:41:05
1.作业要求: 解压安装OpenDayLight控制器(本次实验统一使用Beryllium版本) 启动并安装插件 用Python脚本搭建给定的拓扑,并连接OpenDayLight控制器 在控制器提供的WEB UI中下发流表使h2 在20s内ping不通h3,20s后恢复 借助Postman通过OpenDayLight的北向接口下发流表,再利用OpenDayLight北向接口查看已下发的流表 作业博客链接: http://edu.cnblogs.com/campus/fzu/fzusdn2019/homework/10017 2.具体操作步骤与截图说明: 实验环境:VMware Workstation Pro14.1、ubuntu-16.04 (1)解压安装OpenDayLight控制器(本次实验统一使用Beryllium版本) a.先下载OpenDayLight、Postman的安装包,由于OpenDayLight是java实现的,需要配置java环境,因此要去下载jdk软件开发工具包,相应的下载链接如下: OpenDayLightBeryllium版本下载链接: https://nexus.opendaylight.org/content/repositories/public/org/opendaylight/integration/distribution-karaf/

P1361 小M的作物 (最小割)

眉间皱痕 提交于 2019-11-27 13:33:45
题目描述 小M在MC里开辟了两块巨大的耕地A和B(你可以认为容量是无穷),现在,小P有n中作物的种子,每种作物的种子有1个(就是可以种一棵作物)(用1...n编号)。 现在,第i种作物种植在A中种植可以获得ai的收益,在B中种植可以获得bi的收益,而且,现在还有这么一种神奇的现象,就是某些作物共同种在一块耕地中可以获得额外的收益,小M找到了规则中共有m种作物组合,第i个组合中的作物共同种在A中可以获得c1i的额外收益,共同总在B中可以获得c2i的额外收益。 小M很快的算出了种植的最大收益,但是他想要考考你,你能回答他这个问题么? 输入格式 第一行包括一个整数n 第二行包括n个整数,表示ai第三行包括n个整数,表示bi第四行包括一个整数m接下来m行, 对于接下来的第i行:第一个整数ki,表示第i个作物组合中共有ki种作物, 接下来两个整数c1i,c2i,接下来ki个整数,表示该组合中的作物编号。 输出格式 只有一行,包括一个整数,表示最大收益 输入样例 3 4 2 1 2 3 2 1 2 3 2 1 2 输出样例 11 思路:我们如果不考虑那m种组合 我们可以很容易建图 这种情况其实就是跑一边最大流 用总权值减去最小割 然后我们可以建一个虚拟节点 当作第i种组合: 这样我们还是最大流走一遍 用总权值减去最小割即可 #include <bits/stdc++.h> using

POI2010 Bridges

白昼怎懂夜的黑 提交于 2019-11-27 08:12:05
问题描述 YYD为了减肥,他来到了瘦海,这是一个巨大的海,海中有n个小岛,小岛之间有m座桥连接,两个小岛之间不会有两座桥,并且从一个小岛可以到另外任意一个小岛。现在YYD想骑单车从小岛1出发,骑过每一座桥,到达每一个小岛,然后回到小岛1。霸中同学为了让YYD减肥成功,召唤了大风,由于是海上,风变得十分大,经过每一座桥都有不可避免的风阻碍YYD,YYD十分ddt,于是用泡芙贿赂了你,希望你能帮他找出一条承受的最大风力最小的路线。 输入格式 输入:第一行为两个用空格隔开的整数n(2<=n<=1000),m(1<=m<=2000),接下来读入m行由空格隔开的4个整数a,b(1<=a,b<=n,a<>b),c,d(1<=c,d<=1000),表示第i+1行第i座桥连接小岛a和b,从a到b承受的风力为c,从b到a承受的风力为d。 输出格式 输出:如果无法完成减肥计划,则输出NIE,否则第一行输出承受风力的最大值(要使它最小) 样例输入 4 4 1 2 2 4 2 3 3 4 3 4 4 4 4 1 5 4 样例输出 4 提示 注意:通过桥为欧拉回路 解析 题目要求最大承受风力的最小值,那很明显是二分答案。 二分答案后这个图就会变成一个混合图(也就是既有单向边也有双向边的)。然后只需要判断这个混合图是否为欧拉回路即可。 具体的我们使用网络流模型。设d[i]表示一个点入度减出度的值

POI2010 Bridges

被刻印的时光 ゝ 提交于 2019-11-27 08:11:47
好题 \(Q\omega Q\) 我们考虑这个东西要求最大值最小,显然一眼二分答案对吧. 问题在于如何 \(check\) ,我们二分答案之后把问题转换成了混合图如何求欧拉回路. 考虑欧拉回路的性质,每一个点的入度要 \(=\) 出度. 但是存在无向边,我们先随便让它选择一个方向,然后连一条反向边,容量为1. 这样子我们考虑选这样子一条边意味着让一个点的入度与出度的差 减少/增加 2. 然后直接跑最大流判断是否满流即可. /* mail: mleautomaton@foxmail.com author: MLEAutoMaton This Code is made by MLEAutoMaton */ #include<stdio.h> #include<stdlib.h> #include<string.h> #include<math.h> #include<algorithm> #include<queue> #include<set> #include<map> #include<iostream> using namespace std; #define ll long long #define re register #define file(a) freopen(a".in","r",stdin);freopen(a".out","w",stdout) inline

引入git flow分支管理

久未见 提交于 2019-11-27 07:46:18
阅读目录 两种核心分支 三种临时分支 Git Flow流程示例代码 Git Flow工具 分支命名规范 总结 git flow是Vincent Driessen提出了一个分支管理的策略,非常值得借鉴。它可以使得版本库的演进保持简洁,主干清晰,各个分支各司其职、井井有条。 先看下Vincent Driessen提出的分支管理模型图,以便对git flow有个大概的了解。 回到顶部 两种核心分支 主分支(Master):代码库应该有一个、且仅有一个主分支。所有提供给用户使用的正式版本,都在这个主分支上发布。这个分支只能从其它分支合并,不能在这个分支上直接修改。需要注意的是,所有在master上的提交应该标记tag。 开发主分支(Develop):这个分支是我们是我们的主开发分支,包含所有要发布到下一个Release的代码,这个主要合并与其他分支,比如Feature分支。该分支应该只是进行一些优化和升级开发,如果有新的需求应该拉出一个feature分支。 回到顶部 三种临时分支 功能(feature)分支:这个分支主要是用来开发一个新的功能,一旦开发完成,我们合并回Develop分支进入下一个Release。 预发布(release)分支:当你需要一个发布一个新Release的时候,我们基于Develop分支创建一个Release分支,完成Release后