H题


先给出每条边的费用,qqq组询问,问当每条边的流量为u/vu/vu/v时,跑到流量为1的最小费用

看到数据范围就知道肯定最多只能跑一次费用流,不然会直接TTT飞

思路:求最小费用流的过程中记录每一次增广路增加的流和费用,用mapmapmap记录,最后贪心选择费用小的边进行输出(官方题解和一般的题解我一个都看不懂)

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int inf=0x3f3f3f3f,maxn=2e5+10,maxm=10005;
struct edge{int nex,v,cost,flow;
}e[maxm];
int head[maxn],cnt=1;
int n,m;
map<long long,long long>mp;
inline void add_edge(int u,int v,int cost,int flow){int ww=head[u];e[++cnt]={ww,v,cost,flow};head[u]=cnt;
}
int inque[maxn];
int dis[maxn],flow[maxn],pre[maxn],last[maxn];
bool spfa(int s,int t){queue<int>q;memset(dis,0x3f,sizeof dis);memset(flow,0x3f,sizeof flow);memset(inque,0,sizeof inque);q.push(s);inque[s]=1;dis[s]=0;pre[t]=-1;while(!q.empty()){int u=q.front();q.pop();inque[u]=0;for(int i=head[u];i;i=e[i].nex){int v=e[i].v;if(dis[v]>dis[u]+e[i].cost&&e[i].flow){dis[v]=dis[u]+e[i].cost;pre[v]=u;last[v]=i;flow[v]=min(flow[u],e[i].flow);if(!inque[v]){q.push(v);inque[v]=1;}}}}if(pre[t]!=-1)return true;return false;
}
int maxflow,mincost;
void mcmf(int s,int t){maxflow=0;mincost=0;while(spfa(s,t)){int u=t;//   printf("maxflow==%d %d %d\n",maxflow,flow[t],flow[t]*dis[t]);maxflow+=flow[t];mincost+=flow[t]*dis[t];mp[flow[t]*dis[t]]+=flow[t];while(u!=s){e[last[u]].flow-=flow[t];e[last[u]^1].flow+=flow[t];u=pre[u];}}return;
}
signed main(){while(scanf("%lld%lld",&n,&m)!=EOF){memset(head,0,sizeof head);cnt=1;mp.clear();memset(last,0,sizeof last);int u,v,c;for(int i=1;i<=m;i++){scanf("%lld%lld%lld",&u,&v,&c);add_edge(u,v,c,1);add_edge(v,u,-c,0);}int q;mcmf(1,n);scanf("%lld",&q);while(q--){scanf("%lld%lld",&u,&v);int x=0,y=v;if(maxflow*u<v){//      printf("maxflow==%d %d %d\n",maxflow,u,v);printf("NaN\n");}else{for(auto &i:mp){//              printf("%d=======%d\n",i.first,i.second);if(v>i.second*u){v-=i.second*u;x+=i.first*u;}else{x+=i.first*v/i.second;break;}}int g=__gcd(x,y);printf("%lld/%lld\n",x/g,y/g);}}}return 0;
}

2020牛客多校训练1 H Minimum-cost Flow(最小费用流)相关推荐

  1. 2020 牛客多校第一场

    2020 牛客多校第一场 A. B-Suffix Array 后缀数组的思想:倍增+桶排序的方式找出一串连续序列后缀的大小.虽说正常使用的时候都是字典序,但是只要修改排序方式,也能够达到一个类似的&q ...

  2. 2019牛客多校训练第十场F Popping Balloons

    2019牛客多校训练第十场F Popping Balloons 题意:二维平面内给你若干个点,然后你可以在x轴和y轴分别射三枪(每一枪的间隔是R),问最多能射掉多少气球. 题解:贪心.这个应该只能算作 ...

  3. 2020牛客多校 J Easy Integration 计算过程详解【点火公式(Wallis积分)+组合数学】

    2020牛客暑期多校训练营(第一场) J Easy Integration 题 网上题解大多是 不断分部积分求解,其实有更为简洁的解法. 便是 Wallis积分(点火公式) + 组合数学 求解,本文给 ...

  4. Cutting Bamboos(牛客多校第九场H主席树+二分+思维)

    链接:https://ac.nowcoder.com/acm/contest/889/H 来源:牛客网 There are n bamboos arranged in a line. The i-th ...

  5. [2019牛客多校训练第3场]Median

    链接:https://ac.nowcoder.com/acm/contest/883/I 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536 ...

  6. 2020牛客多校第1场H-Minimum-cost Flow-最小费用流

    https://ac.nowcoder.com/acm/contest/5666/H 题目大意:给出了每一条边的费用,有q个询问,问当每一条边的容量为u/v时,通过1流量的最小费用是多少. 思路:很明 ...

  7. [2020牛客多校第一场]Coda的题解集

    被暴打了. 会先写比赛中过题数100+的题目,其他的以后再补. 施工中,未完待续- F Infinite String Comparision 一开始想到的是对比到lcm(|a|,|b|),意料之中T ...

  8. 2020牛客多校联赛第四场 (BFH)

    文章目录 B:Basic Gcd Problem 题目 翻译 例子 大意 思路 代码 F:Finding the Order 题目 翻译 例子 大意 思路 代码 H:Harder Gcd Proble ...

  9. FFT ---- 2021牛客多校第一场 H Hash Function

    题目链接 题目大意: 解题思路: 首先我们知道任意两个数%seed\%seed%seed都不相同→\rightarrow→(aj−ai)%seed≠0(∀ai≤aj)(a_j-a_i)\%seed\n ...

  10. 2020牛客多校第1场H-Minimum-cost Flow

    解题思路: 首先我们要从费用流mcmf的算法入手:因为它每次增广是再费用增广路上跑的,根据贪心的思想费用小的路基本上能运多少就尽量运多少,所以我们可以假设初始的边容量是1,只跑一遍mcmf.记录一下每 ...

最新文章

  1. 空间滤波器是怎么来的
  2. python 的String,集合(List,元组,Dict)
  3. 判断触发器正在处理的是插入,删除还是更新触发
  4. 方法分享:有序集合分段
  5. Apache Rewrite 规则详解
  6. js禁止粘贴非数字内容
  7. 在ASP.NET Web Application 中如何处理图片 【转】-有用
  8. 学Python前途如何,带你了解Python的优势!
  9. centos7 安装 卸载docker
  10. 网上关于豆瓣的思考搜集
  11. 光影精灵安装ubuntu20.04安装显卡驱动外界显示屏
  12. 飞桨2.0高层api教程——使用BERT实现自动写诗
  13. 罗米欧与朱丽叶(徐志摩)
  14. 各行业工资单出炉 IT类连续多年霸占“榜首”位置
  15. CV之IE之Inception:基于TF框架利用Inception模型+GD算法的某层网络图像生成不同尺寸和质量的Deep Dream幻觉梦境图片(特征可视化实现图像可解释性)—五个架构设计思维导图
  16. Nature:用2斤DNA就能存储世界上所有的数据
  17. 利用python编写爬虫程序,从招聘网站上爬取数据,将数据存入到MongoDB数据库中,将存入的数据作一定的数据清洗后做数据分析,最后将分析的结果做数据可视化
  18. 二叉树的前序遍历-python
  19. iOS逆向工程-工具篇
  20. 程序员用c语言写的新年祝福,程序员的新年祝福:Happy New Year

热门文章

  1. oracle 10g for solaris准备工作和实例的删除
  2. Java中异常处理示例
  3. 台式电脑显示器黑屏但灯亮_显示器黑屏无信号 但电脑一直在运行的原因和解决办法...
  4. sudo spctl --master-disable_2020推荐聊城灭火器检测--正规企业--【聊城市久安消防】...
  5. Linux字符设备和块设备的区别
  6. 关于64位CentOS上ptrace报linux/user.h no such file 错误的解决方法
  7. 添加mysql.h头文件
  8. BNU 背包密码(编码与解密)
  9. linux查看文件权限_Linux权限管理 -- 文件权限
  10. Somer’s D(Somers’ Delta)-顺序变量相关性分析方法