热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Ahoi2014Jsoi2014支线剧情

题目描述题解:每条边至少经过一次,说明经过下界为$1$。然后套有源汇上下界最小费用可行流板子。口胡一下。此类问题的建图通式为:1.假设原来

题目描述

题解:

每条边至少经过一次,说明经过下界为$1$。

然后套有源汇上下界最小费用可行流板子。

口胡一下。

此类问题的建图通式为:

1.假设原来的边流量上下界为$[l,r]$,那么在新图中建流量上界为$(r-l)$的边;

就是必须流的先流完,不一定的一会再算。

2.统计一下每个点流入的$l$之和$ind$以及流出的$l$之和$otd$,设$d=ind-otd$;

若$d>0$,则建一条从新源点到该点的、容量为$d$的边,表示减下界的时候多减了,要加回来;

若$d<0$&#xff0c;则建一条从该点到新汇点的、容量为$-d$的边&#xff0c;表示加多了&#xff0c;要减回来。

3.旧汇点->旧源点&#xff0c;容量为$inf$&#xff0c;有借有还再借不难

然后求新图的最小费用最大流&#xff0c;答案即为最小费用&#43;所有边的费用*下界。

代码&#xff1a;

#include
#include

#include

#include

using namespace std;
typedef
long long ll;
const int N &#61; 350;
const int inf &#61; 0x3f3f3f3f;
const ll Inf &#61; 0x3f3f3f3f3f3f3f3fll;
template

inline
void read(T&x)
{T f
&#61; 1,c &#61; 0;char ch&#61;getchar();while(ch<&#39;0&#39;||ch>&#39;9&#39;){if(ch&#61;&#61;&#39;-&#39;)f&#61;-1;ch&#61;getchar();}while(ch>&#61;&#39;0&#39;&&ch<&#61;&#39;9&#39;){c&#61;c*10&#43;ch-&#39;0&#39;;ch&#61;getchar();}x &#61; f*c;
}
int n,hed[N],cnt&#61;-1,S,T,otd[N],ind[N],SS,TT;
struct EG
{
int to,nxt;ll f,w;
}e[
60*N];
void ae(int f,int t,ll fl,ll wl)
{e[
&#43;&#43;cnt].to &#61; t;e[cnt].nxt &#61; hed[f];e[cnt].f &#61; fl;e[cnt].w &#61; wl;hed[f] &#61; cnt;
}
void AE(int f,int t,ll fl,ll wl)
{ae(f,t,fl,wl);ae(t,f,
0,-wl);
}
int pre[N],fa[N];
ll dis[N],fl[N],ans;
bool vis[N];
bool spfa()
{queue
<int>q;memset(dis,0x3f,sizeof(dis));dis[SS]&#61;0,fl[SS]&#61;Inf,vis[SS]&#61;1;q.push(SS);while(!q.empty()){int u &#61; q.front();q.pop();for(int j&#61;hed[u];~j;j&#61;e[j].nxt){int to &#61; e[j].to;if(e[j].f&&dis[to]>dis[u]&#43;e[j].w){dis[to]&#61;dis[u]&#43;e[j].w;fl[to]&#61;min(fl[u],e[j].f);fa[to]&#61;u,pre[to]&#61;j;if(!vis[to]){vis[to]&#61;1;q.push(to);}}}vis[u]&#61;0;}return dis[TT]!&#61;Inf;
}
ll mcmf()
{ll ret
&#61; 0;while(spfa()){ret&#43;&#61;fl[TT]*dis[TT];int u &#61; TT;while(u!&#61;SS){e[pre[u]].f-&#61;fl[TT];e[pre[u]^1].f&#43;&#61;fl[TT];u&#61;fa[u];}}return ret;
}
int main()
{read(n);S
&#61;1,T&#61;n&#43;1;SS&#61;n&#43;2,TT&#61;n&#43;3;memset(hed,-1,sizeof(hed));for(int k,t,w,i&#61;1;i<&#61;n;i&#43;&#43;){read(k);while(k--){read(t),read(w);ind[t]&#43;&#43;,otd[i]&#43;&#43;;AE(i,t,inf,w);ans&#43;&#61;w;}if(i!&#61;1)AE(i,T,inf,0);}for(int i&#61;1;i<&#61;n&#43;1;i&#43;&#43;){int d &#61; ind[i]-otd[i];if(d<0)AE(i,TT,-d,0);else AE(SS,i,d,0);}AE(T,S,inf,0);ans&#43;&#61;mcmf();printf("%lld\n",ans);return 0;
}

 

转:https://www.cnblogs.com/LiGuanlin1124/p/10349141.html



推荐阅读
  • 题目Link题目学习link1题目学习link2题目学习link3%%%受益匪浅!-----&# ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • 本题旨在通过给定的评级信息,利用拓扑排序和并查集算法来确定全球 Tetris 高手排行榜。题目要求判断是否可以根据提供的信息生成一个明确的排名表,或者是否存在冲突或信息不足的情况。 ... [详细]
  • 本文深入探讨了POJ2762问题,旨在通过强连通分量缩点和单向连通性的判断方法,解决有向图中任意两点之间的可达性问题。文章详细介绍了算法原理、实现步骤,并附带完整的代码示例。 ... [详细]
  • 本文介绍如何使用Objective-C结合dispatch库进行并发编程,以提高素数计数任务的效率。通过对比纯C代码与引入并发机制后的代码,展示dispatch库的强大功能。 ... [详细]
  • 题目描述:给定n个半开区间[a, b),要求使用两个互不重叠的记录器,求最多可以记录多少个区间。解决方案采用贪心算法,通过排序和遍历实现最优解。 ... [详细]
  • UNP 第9章:主机名与地址转换
    本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ... [详细]
  • Splay Tree 区间操作优化
    本文详细介绍了使用Splay Tree进行区间操作的实现方法,包括插入、删除、修改、翻转和求和等操作。通过这些操作,可以高效地处理动态序列问题,并且代码实现具有一定的挑战性,有助于编程能力的提升。 ... [详细]
  • 本题探讨如何通过最大流算法解决农场排水系统的设计问题。题目要求计算从水源点到汇合点的最大水流速率,使用经典的EK(Edmonds-Karp)和Dinic算法进行求解。 ... [详细]
  • Explore how Matterverse is redefining the metaverse experience, creating immersive and meaningful virtual environments that foster genuine connections and economic opportunities. ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • DNN Community 和 Professional 版本的主要差异
    本文详细解析了 DotNetNuke (DNN) 的两种主要版本:Community 和 Professional。通过对比两者的功能和附加组件,帮助用户选择最适合其需求的版本。 ... [详细]
  • 本文探讨了 Objective-C 中的一些重要语法特性,包括 goto 语句、块(block)的使用、访问修饰符以及属性管理等。通过实例代码和详细解释,帮助开发者更好地理解和应用这些特性。 ... [详细]
  • This document outlines the recommended naming conventions for HTML attributes in Fast Components, focusing on readability and consistency with existing standards. ... [详细]
  • 使用Vultr云服务器和Namesilo域名搭建个人网站
    本文详细介绍了如何通过Vultr云服务器和Namesilo域名搭建一个功能齐全的个人网站,包括购买、配置服务器以及绑定域名的具体步骤。文章还提供了详细的命令行操作指南,帮助读者顺利完成建站过程。 ... [详细]
author-avatar
突击手丶罪域
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有