2017.10.11 network 网络扩容 思考记录
第一问是网络流。
第二问是费用流,但之前的边依然是可以用的,所以每个点决策:用原来的流量 购买一条流量,扫每条边加进去就可以了
然后限制流出为k
码:
#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
using namespace std;
#define N 1005
#define M 50005
#define inf 10000007
int tot=-1,hou[M],yi[M],er[M],san[M],si[M],s,t,xia[N],zhong[M],yuan[M],v[M],co[M],dis[N],daan,n,m,k,i,j,qj[N];
bool vis[N];
queue<int>q;
void jian(int a,int b,int c,int d)
{++tot;hou[tot]=yuan[a],yuan[a]=tot,zhong[tot]=b,v[tot]=c,co[tot]=d;
}
void jia(int a,int b,int c,int d)
{
jian(a,b,c,d);
jian(b,a,0,-d);
}
bool bfs()
{for(i=1;i<=n;i++){xia[i]=yuan[i];dis[i]=inf; }q.push(s);dis[s]=1;while(!q.empty()){int st=q.front();q.pop();for(i=xia[st];i!=-1;i=hou[i]){int nd=zhong[i];if(dis[nd]!=inf||v[i]==0)continue;dis[nd]=dis[st]+1;q.push(nd); } }return dis[t]<inf;
}
int dfs(int o,int t,int limit)
{if(o==t||!limit)return limit;int i,f,flow=0;for(i=xia[o];i!=-1;i=hou[i]){xia[o]=i;int nd=zhong[i];if(dis[nd]==dis[o]+1&&(f=dfs(nd,t,min(limit,v[i])))){limit-=f;flow+=f;v[i]-=f;v[i^1]+=f; if(!limit)break;}}return flow;
}
int dinic()
{int ans=0;while(bfs()){ans+=dfs(s,t,inf);}return ans;
}
bool spfa()
{qj[s]=-1;for(i=1;i<=n;i++){dis[i]=inf;}q.push(s);dis[s]=0;while(!q.empty()){int st=q.front();vis[st]=0;q.pop();for(i=yuan[st];i!=-1;i=hou[i]){int nd=zhong[i];if(v[i]>0&&dis[nd]>dis[st]+co[i]){dis[nd]=dis[st]+co[i];qj[nd]=i^1;if(vis[nd]==0){q.push(nd);vis[nd]=1;}}}}if(dis[t]==inf)return 0;int o,minn=inf;for(o=qj[t];o!=-1;o=qj[zhong[o]]){minn=min(minn,v[o^1]); }for(o=qj[t];o!=-1;o=qj[zhong[o]]){v[o]+=minn;v[o^1]-=minn;daan+=minn*co[o^1]; }return 1;
}
int mcmf()
{while(spfa());
}
int main()
{memset(yuan,-1,sizeof(yuan));scanf("%d%d%d",&n,&m,&k);s=1;t=n;for(i=1;i<=m;i++){scanf("%d%d%d%d",&yi[i],&er[i],&san[i],&si[i]);jia(yi[i],er[i],san[i],0);}printf("%d",dinic());for(i=1;i<=m;i++){jia(yi[i],er[i],15,si[i]); }++n;jia(t,n,k,0);t=n;mcmf();printf(" %d",daan);
}
2017.10.11 network 网络扩容 思考记录相关推荐
- 2017.10.5 最短母串 思考记录
这个题n<=15,可以用10表示选取情况下的最优值 预处理两个串之间的连接关系,然后枚举状态转移 然而这个题还要输出方案,,而且还不让你开空间. 所以只能记录前继动态判断.. 所以十分难写难调 ...
- 2017.10.1 互不侵犯king 思考记录
..没想到做的这么顺利 首先n<=⑨.. 所以状压这个⑨ 然后枚举状态转移累加即可 f[行数][最上层排布情况][已经用了几个] 最后 Σf[n][i][k] 0<=i<2 ...
- 2017.10.1 atcoder TK1 D 思考记录
题目大意:给你10^5个物品,有重量和价值, 求重量按位或不超过k的物品的最大价值 首先它是不可以dp的,因为与运算对于背包不能离散,所以考虑模拟入手 从最高位往下找,来保证小于k 若这一位是1,则这 ...
- 2017.10.23 chess 中国象棋 思考记录
这种题的一般解法: 1. 发现状压可以搞,然后发现状态爆炸 2.考虑状态特点,一共只有几种可能的状态 3.考虑可不可以只对状态进行计数 4.离散统计贡献 码: #include<iostream ...
- 2017.10.19 起床困难综合征 思考记录
2333noi送分题 首先暴力试每个数有些二进制位是会重复算的,,所以就考虑能否把每个二进制位独立考虑 老性质:二进制运算每一位独立 所以二进制dp,如果这一位输入1,是多少,输入0,是多少 然后按二 ...
- 2017.10.7 弹飞绵羊 思考记录
..这个题根据弹后的关系是很容易想出一个森林的..修改连接关系就是cut和link.. 但是分块的做法似乎十分优越,,好写好调.所以学一下分块的写法 首先每一个区间的信息都是可以做到O(1)查询的.. ...
- 七周三次课(1月24日) 10.11 Linux网络相关 10.12 firewalld和netfilter 10.13 netfilter5表5链介绍 10.14 iptables语法...
七周三次课(1月24日) 10.11 Linux网络相关 10.12 firewalld和netfilter 10.13 netfilter5表5链介绍 10.14 iptables语法 ====== ...
- [BZOJ 1834] [ZJOI2010]network 网络扩容
1834: [ZJOI2010]network 网络扩容 Time Limit: 3 SecMemory Limit: 64 MB Description 给定一张有向图,每条边都有一个容量C和一个扩 ...
- [BZOJ1834][ZJOI2010]network 网络扩容 最大流+费用流
1834: [ZJOI2010]network 网络扩容 Time Limit: 3 Sec Memory Limit: 64 MB Submit: 3330 Solved: 1739 [Subm ...
最新文章
- 如何用CSS快速布局(一)—— 布局元素详细
- js获取当前Frame在父页面中的id
- 基类的析构函数不能被继承。_为什么要把C++类中的析构函数声明为虚函数?
- linux rm 不释放_linux删除文件空间不释放问题解决
- linux进程配置异常中断自动重启_Linux系统配置及服务管理 (四)进程管理
- 约瑟夫环 java_约瑟夫环Java实现
- 常用adb shell 命令
- AndroidStudio_报错PluginApplicationException: Failed to apply plugin [id ‘com.and---Android原生开发工作笔记227
- matlab判断同构数,c语言:编写函数判断x是否同构数
- xmapp 终端数据库问题记录 已解决
- Linux虚拟机设置全屏
- 不歧视双非的计算机院校,这30所重点院校不歧视“双非”,公平竞争录取,爱了爱了!...
- 累加器实验总结计算机组成,计算机组成原理累加器实验报告
- 临时或永久修改cgroup和Cgroup 入门教程:cpuset
- 电脑无法分屏,连接两个显示器,但只能检测到一个显示器,且只有一个显示器有画面
- 怎么能快速的把pdf转换为word格式
- 【pthread_cancel函数:避免踩坑】
- 威猛的 90 后,不等领导下班就先走,《2021 年轻人下班报告》公布
- 老油条用什么工具写文档?
- Windows桌面出现未激活
热门文章
- cpu计算速度排行榜_CPU速度的计算方法和单位
- SpringBoot自动装配探究
- Kotlin学习笔记18 反射Part2
- Ubuntu18.04上手配置入门指南
- WORD如何将标题编号设置为汉字编号?
- android gradle 1.5.0,Cordova build – 无法解析com.android.tools.build:gradle:1.5.0
- 【java基础知识】swagger组件常用命令
- 【rabbitmq安装教程】centos7下安装rabbitMQ
- day10 java的this关键字
- python获取字符串第一个字母_Python3基础 字符串 capitalize 返回一个新的字符串,它的第一个字母大写...