Submission #1161623

#TimeUsernameProblemLanguageResultExecution timeMemory
1161623zolwJob Scheduling (IOI19_job)C++20
0 / 100
3095 ms327680 KiB
#include "job.h"
#include <vector>
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;
#define rep(a,b) for(int a = 0; a < (b); ++a)
#define all(t) t.begin(), t.end()
#define pb push_back

//#pragma GCC target ("avx2")
//#pragma GCC optimization ("O3")
//#pragma GCC optimization ("unroll-loops")

const int N = 2e5+5432, INF = 2e9+54321;
const ll INF_L = (ll)2e18+54321, mod = 998244353;

struct Element
{
	ll u,t;
	bool operator < (const Element &element) const
	{
		return t*element.u < element.t*u;
	}
};

ll n;
ll P[N], U[N], T[N];
vector<Element> A[N];
vector<ll> G[N];

void DFS(ll v)
{
	for(auto x : G[v])
	{
		DFS(x);

		int wsk = -1, dod = -1;
		vector<Element> P;

		for(auto y : A[x])
		{
			Element akt = {0,0};
			int wsk2 = wsk;
			for(int i = wsk2+1; i < (int)A[v].size(); ++i)
			{
				akt = {akt.u+A[v][i].u,akt.t+A[v][i].t};
				if(akt < y)
				{
					wsk = i;
					akt = {0,0};
				}
			}
			while(dod < wsk) ++dod, P.pb(A[v][dod]);
			P.pb(y);
		}

		while(dod+1 < (int)A[v].size()) ++dod, P.pb(A[v][dod]);
		A[v] = P;
	}
	vector<Element> akt = {{U[v],T[v]}};
	for(auto x : A[v]) akt.pb(x);
	A[v] = akt;
}

long long scheduling_cost(std::vector<int> p, std::vector<int> u, std::vector<int> d) {
	n = (ll)p.size();
	rep(i,n) P[i] = p[i], U[i] = u[i], T[i] = d[i];

	for(int i = 1; i < n; ++i)
	{
		G[P[i]].pb(i);
	}

	DFS(0);	

	ll t = 0, ans = 0;
	for(auto x : A[0])
	{
		t += x.t;
		ans += t*x.u;
	}

	return ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...