首页 > 代码库 > HDU 3974 Assign the task 简单搜索
HDU 3974 Assign the task 简单搜索
根据Rex 的思路才知道可以这么写。
题目意思还是很好理解的,就是找到当前雇员最近的任务。
做法是,可以开辟一个 tim 变量,每次有雇员得到昕任务时候 ++tim
然后取寻找最近的任务的时候写一个搜索就可以
核心代码:
while(num != -1){ num = a[num].leader; if(ttime < a[num].time){ ans = a[num].work; ttime = a[num].time; } }
Source code:
//#pragma comment(linker, "/STACK:16777216") //for c++ Compiler#include <stdio.h>#include <iostream>#include <cstring>#include <cmath>#include <stack>#include <queue>#include <vector>#include <algorithm>#define ll long long#define Max(a,b) (((a) > (b)) ? (a) : (b))#define Min(a,b) (((a) < (b)) ? (a) : (b))#define Abs(x) (((x) > 0) ? (x) : (-(x)))using namespace std;const int INF = 0x3f3f3f3f;struct sc{ int work, leader, time;}a[50001];int main(){ std::ios::sync_with_stdio(false); int i, j, k, t, n, m, u, v, num, tt, caseNum, ttime; char cmd; caseNum = 0; cin >> t; while(t--){ int tim = 0; for(i = 1; i <= 50000; ++i){ a[i].work = -1; a[i].time = 0; a[i].leader = -1; } cin >> n; for(i = 1; i < n; ++i){ cin >> u >> v; a[u].leader = v; } cout << "Case #" << ++caseNum << ":" << endl; cin >> m; while(m--){ cin >> cmd; if(cmd == ‘C‘){ cin >> num; ttime = a[num].time; int ans = a[num].work; while(num != -1){ num = a[num].leader; if(ttime < a[num].time){ ans = a[num].work; ttime = a[num].time; } } cout << ans << endl; } else{ cin >> num >> tt; a[num].work = tt; a[num].time = ++tim; } } } return 0;}
HDU 3974 Assign the task 简单搜索
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。