[P3074

2023-11-01

题目描述

Farmer John’s N cows (1 <= N <= 10,000) are conveniently numbered 1…N.
Each cow i takes T(i) units of time to milk. Unfortunately, some cows must be milked before others, owing to the layout of FJ’s barn. If cow A must be milked before cow B, then FJ needs to completely finish milking A before he can start milking B.

In order to milk his cows as quickly as possible, FJ has hired a large number of farmhands to help with the task – enough to milk any number of cows at the same time. However, even though cows can be milked at the same time, there is a limit to how quickly the entire process can proceed due to the constraints requiring certain cows to be milked before others. Please help FJ compute the minimum total time the milking process must take.

输入

  • Line 1: Two space-separated integers: N (the number of cows) and M(the number of milking constraints; 1 <= M <= 50,000).

  • Lines 2…1+N: Line i+1 contains the value of T(i) (1 <= T(i) <= 100,000).

  • Lines 2+N…1+N+M: Each line contains two space-separated integers A and B, indicating that cow A must be fully milked before one can start milking cow B. These constraints will never form a cycle, so a solution is always possible.

输出

  • Line 1: The minimum amount of time required to milk all cows.

样例输入

3 1
10
5
6
3 2

样例输出

11

提示

INPUT DETAILS:
There are 3 cows. The time required to milk each cow is 10, 5, and 6,respectively. Cow 3 must be fully milked before we can start milking cow 2.

OUTPUT DETAILS:
Cows 1 and 3 can initially be milked at the same time. When cow 3 is finished with milking, cow 2 can then begin. All cows are finished milking after 11 units of time have elapsed.

题意:
一共有n头奶牛,每头奶牛挤奶都会消耗一定的时间 t i t_i ti
然后有 m m m个关系, u − v u-v uv,其含义是 u u u必须在 v v v之前挤奶,而且有足够的人手多线程挤奶,问为这 n n n头奶牛挤完奶一共需要消耗多长时间

思路:
首先可以确定这m个关系中,不会出现环的情况,所以说可以考虑用 s p f a spfa spfa来处理这道题目,怎么来确定最后被挤奶的奶牛呢?
因为 m m m个关系可以看作是有向边,所以最后被挤奶的奶牛一定是出度为0的,但出度为0的点可能并不唯一
怎样来确定从那一头牛开始?
类似的我们可以知道一定是从入读为0的点开始,入度为0的点也可能并不唯一

所以我们可以建立一个超级源点 0 0 0与所有入度为0的点相连,然后让所有出度为0的点与超级汇点 n + 1 n+1 n+1相连,所以说最终的答案就是从超级源点走到超级汇点的最长路径
因为需要从0转移到其他节点,所以说可以先给0号节点设置一个点权1,最终减去即可

ac_code:

#define Clear(x,val) memset(x,val,sizeof x)
int in[maxn],out[maxn];
typedef pair<ll,int> PII;
int n,m;
vector<int>gra[maxn];
ll a[maxn];
ll dis[maxn];
bool vis[maxn];
int cnt,head[maxn];
void init() {
	cnt = 0;
	Clear(head,-1);
}
struct node {
	int v,nex;
} e[maxn];
void add(int u,int v) {
	e[cnt].v = v;
	e[cnt].nex = head[u];
	head[u] = cnt ++;
}///ac 
void spfa() {
	dis[0] = 0;
	vis[0] = 1;
//	queue<PII> que;
	priority_queue<PII,vector<PII>,greater<PII> > que;
	que.push({0,0});
	while(que.size()) {
		PII cur = que.top();
		que.pop();
		int u = cur.second;
		vis[u] = false;
		for(int i=head[u]; ~i; i=e[i].nex) {
			int to = e[i].v;
			if(dis[to] < dis[u] + a[u]) {
				dis[to] = dis[u] + a[u];
				if(!vis[to]) {
					vis[to] = true;
					que.push({dis[to],to});
				}
			}
		}
	}
}
int main() {
	n = read,m = read;
	init();
	a[0] = 1;
	Clear(dis,0);
	Clear(vis,0);
	for(int i=1; i<=n; i++)  a[i] = read;
	for(int i=1; i<=m; i++) {
		int u = read,v = read;
		gra[u].push_back(v);
		add(u,v);
		in[v] ++;
		out[u] ++;
	}
	for(int i=1; i<=n; i++) {
		if(!in[i]) add(0,i);
		if(!out[i]) add(i,n+1);
	}
	spfa();
	cout << dis[n + 1] - 1 << endl;
	return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

[P3074 的相关文章

  • JUC 十三. CountDownLatch 与 CyclicBarrier 与 Semaphore 基础使用与底层原理

    目录 一 CountDownLatch 减少计数器 二 CyclicBarrier 循环栅栏 三 Semaphore 信号灯 四 CountDownLatch 底层实现 await 判断state 也可以简单理解为计数 如果为0获取锁成功
  • css背景 背景颜色 颜色渐变

    背景全屏 body background image url imgs bj png background repeat no repeat background size 100 100 background attachment fix
  • 私信功能

    最近在做一个私信的功能 一张message表 存储消息内容和创建者id 一张user message表 存储发送者 接收者及消息id 本以为考虑还算周全 今天又查看了一些文章 发现还是差的远 下面是从OSChina转来的一篇文章 比我设计的

随机推荐

  • 关于Filter 覆盖getParameterMap 来实现功能

    在获得请求中的参数时 有三种方法 getParameter getParameterMap getParameterValues 这三种方法在底层实现中是互相调用的 所以若要彻底解决提交乱码的问题 则需要覆盖这三个方法 覆盖getParam
  • uLua中遇到的问题

    1 C 调用lua函数参数为空的问题 在C 中调用以 定义的函数传参时 self被第一个参数覆盖 而obj将为空 MessagePanel function MessagePanel Test1 obj lua调用正常 obj为传入参数 s
  • 上银伺服驱动器接线图_FRLS10205A4C上银伺服电机HIWIN D2-1023-P-C0 FRMS7520508C MD-36-S2...

    mega fabe成都上银伺服驱动器维修MD 18 DFRLS10205A4C上银伺服电机HIWIN D2 1023 P C0 FRMS7520508C MD 36 S2 能够发挥最大效能 ST系列电机SD300 310 系列 SD系列交流
  • pluto实现分析(19)

    本文档的Copyleft归yfydz所有 使用GPL发布 可以自由拷贝 转载 转载时请保持文档的完整性 严禁用于任何商业用途 msn yfydz no1 hotmail com 来源 http yfydz cublog cn 15 快速模式
  • 华为OD机试真题- 喊7的次数重排-2023年OD统一考试(B卷)

    题目描述 喊7是一个传统的聚会游戏 N个人围成一圈 按顺时针从1到N编号 编号为1的人从1开始喊数 下一个人喊的数字为上一个人的数字加1 但是当将要喊出来的数字是7的倍数或者数字本身含有7的话 不能把这个数字直接喊出来 而是要喊 过 假定玩
  • python怎么产生随机浮点数_python3生成随机数的几种常用方法

    前言 python中生成随机数主要用到random模块 方法主要包括 randint uniform random sample choice等几种常用方法 本篇教程就来说说这几种方法的使用方式 以及唯一流水号 时间戳 和验证码的实例展示
  • 高德地图的逆地理编码

    在一些比赛中 我们经常需要将地理位置转化为经纬度坐标 地理编码 或是将经纬度坐标转化为对应的地理位置 逆地理编码 对于这类问题 一般需要调用某个地图的API来实现 这里以高德地图的API为例 介绍如何实现逆地理编码 第一步 在高德地图API
  • ogre引擎0.12.0抄写记录

    惊喜地发现 文档齐全 可以参考类图抄 C Users Legion Desktop ogre v0 12 0 ogrenew Docs api html hierarchy html 先进行 1 OgreMain 然后 2 RenderSy
  • django实现文件上传

    在django中实现文件上传有三种方法可以实现 自己手动写 使用Form组件 使用ModelForm组件 其中使用ModelForm组件实现是最简单的 1 自己手写 先写一个上传的页面 upload file html enctype mu
  • 【大电流H桥电机驱动电路的设计与解析(包括自举电路的讲解,以IR2104+LR7843为例)】

    一 简介 之前介绍过H桥电机驱动电路的基本原理 但是以集成的电机驱动芯片为示例 这些集成的芯片使用起来比较简单 但是只能适用于一些小电流电机 对于大电流的电机 比如 RS380和RS540电机 则不能使用这些集成的芯片 否则会导致芯片严重发
  • vue component使用,动态加载子组件,调用子组件方法

    1 vue component使用 component组件 单独拿出一个组件来专门进行切换使用 官方文档 https cn vuejs org v2 guide components html 动态组件 https cn vuejs org
  • GCN为什么是半监督学习?

    因为GCN那篇论文里面 数据集的划分是一部分有标签 一部分没标签 但是在使用图的连接信息的时候用到了图的邻接矩阵 所有这部分是用到了全部图的结构信息 而有一部分节点没有标签 所以作者才把论文名字命名为半监督学习
  • 5.1声道测试音乐_5分钟让你搞懂单声道和立体声的真正区别!

    大家好 我是音乐人顾颂 从今天开始 我将不定期的通过图文的方式向大家介绍一些关于音乐方面的一些小知识 希望在此和你共同探讨 共同进步 第二篇 单声道与立体声 当我们通过音频播放设备收听声音的时候 我们的大脑会根据左右耳接受到了声音信号的差异
  • 制造业数字化转型存在哪些问题

    数字时代 制造业数字化转型不再是一道 选择题 而是 必答题 但各地政府以及企业正面临 对颠覆程度认识不足 对变革速度心存侥幸 对投入成本估计过高 三个方面的问题 一是对制造业数字化的颠覆程度认识不足 数字化变革推动下 制造业产品的价值来源正
  • android 系统级应用和服务的启动流程

    activityManagerService java 1 systemRaady 收到systemReady 通知 2 AppGlobals getPackageManager getPersistentApplications STOC
  • Android 一个类搞定软键盘弹起手下监听

    内容来自https www jianshu com p 56b91640aa10 监听很灵敏 一 使用 new SoftKeyBroadManager linearLayout addSoftKeyboardStateListener ne
  • 十、Java中的数组

    数组 Array 计算机专业的小伙伴对这个词都不陌生 不是计算机专业的小伙伴也不用怕书源会为大家介绍清楚数组 Array 这个概念 1 数组是数据结构的一种 那么什么是数据结构呢 简单理解数据结构就是带有结构特性的数据元素的集合 2 那么回
  • 学习python: 模块的建立与发布

    简单的说 一个python文件就是一个模块 本文主要介绍以下3点 模块的建立及导入 包的建立及导入 发布和安装自定义模块 模块的建立及导入 我们在写c 或者c 时候 为了复用代码 总是将一系列相关的函数写在一个 c文件中 或者封装一个类写在
  • 微软 Windows 10 删除文件“您需要来自 Trustedinstaller 的权限”解决方法

    问题描述 在删除 Windows 10 文件 例如 WINDOWS BT 时弹出文件夹访问被拒绝 你需要来自 Trustedinstaller 的权限才能对此文件夹进行更改 操作步骤 1 右键文件夹 选择 属性 2 选择 安全 3 选择 高
  • [P3074

    题目描述 Farmer John s N cows 1 lt N lt 10 000 are conveniently numbered 1 N Each cow i takes T i units of time to milk Unfo