首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【HDU】4907 - Task schedule(并查集)

【HDU】4907 - Task schedule(并查集)

作者头像
FishWang
发布2025-08-27 09:11:52
发布2025-08-27 09:11:52
12200
代码可运行
举报
运行总次数:0
代码可运行

点击打开题目

Task schedule

Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 2730 Accepted Submission(s): 921

Problem Description

有一台机器,并且给你这台机器的工作表,工作表上有n个任务,机器在ti时间执行第i个任务,1秒即可完成1个任务。 有m个询问,每个询问有一个数字q,表示如果在q时间有一个工作表之外的任务请求,请计算何时这个任务才能被执行。 机器总是按照工作表执行,当机器空闲时立即执行工作表之外的任务请求。

Input

输入的第一行包含一个整数T, 表示一共有T组测试数据。 对于每组测试数据: 第一行是两个数字n, m,表示工作表里面有n个任务, 有m个询问; 第二行是n个不同的数字t1, t2, t3....tn,表示机器在ti时间执行第i个任务。 接下来m行,每一行有一个数字q,表示在q时间有一个工作表之外的任务请求。 特别提醒:m个询问之间是无关的。 [Technical Specification] 1. T <= 50 2. 1 <= n, m <= 10^5 3. 1 <= ti <= 2*10^5, 1 <= i <= n 4. 1 <= q <= 2*10^5

Output

对于每一个询问,请计算并输出该任务何时才能被执行,每个询问输出一行。

Sample Input

代码语言:javascript
代码运行次数:0
运行
复制
   1
5 5
1 2 3 5 6
1
2
3
4
5

Sample Output

代码语言:javascript
代码运行次数:0
运行
复制
   4
4
4
4
7

Source

BestCoder Round #3

f 数组表示当天往后第一个空闲的天数,查询的时候同时进行路径压缩,如果查询的次数多的话,比二分的速度还要快。

代码如下:

代码语言:javascript
代码运行次数:0
运行
复制
#include <cstdio>
#define MAX 200000
int f[MAX+11];
int find(int x)
{
	if (x != f[x])
		f[x] = find (f[x]);
	return f[x];
}
int main()
{
	int u;
	int n,k;
	scanf ("%d",&u);
	while (u--)
	{
		scanf ("%d %d",&n,&k);
		for (int i = 1 ; i <= MAX ; i++)
			f[i] = i;
		int t;
		for (int i = 1 ; i <= n ; i++)
		{
			scanf ("%d",&t);
			f[t] = t + 1;
		}
		for (int i = 1 ; i <= k ; i++)
		{
			scanf ("%d",&t);
			printf ("%d\n",find(t));
		}
	}
	return 0;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-08-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Task schedule
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档