Submission #370284

# Submission time Handle Problem Language Result Execution time Memory
370284 2021-02-23T16:22:05 Z Return_0 Factories (JOI14_factories) C++17
15 / 100
4346 ms 395372 KB
// #pragma GCC optimize("Ofast,unroll-loops")
// #pragma comment(linker, "/stack:200000000")
// #pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,avx2,fma,tune=native")

#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>

#ifndef SINA
#include "factories.h"
#endif

using namespace std;
using namespace __gnu_pbds;

typedef int ll;
typedef long double ld;
typedef pair <ll, ll> pll;

#ifdef SINA
#define dbg(...) __f(#__VA_ARGS__, __VA_ARGS__)
template <typename Arg1> void __f(const char* name, Arg1&& arg1) { cout << name << " : " << arg1 << std::endl; }
template <typename Arg1, typename... Args> void __f (const char* names, Arg1&& arg1, Args&&... args) {
	const char* comma = strchr(names + 1, ',');cout.write(names, comma - names) << " : " << arg1<<" | ";__f(comma+1, args...); }
#define dbg2(x, j, n) cout<< #x << " : "; output((j), (n), x, 1); cout.flush();
#else
#define dbg(...) 0
#define dbg2(x, j, n) 0
#endif
#define SZ(x) ((ll)((x).size()))
#define File(s, t) freopen(s ".txt", "r", stdin); freopen(t ".txt", "w", stdout);
#define input(j, n, a) for (int _i = (j); _i < (n)+(j); _i++) cin>> a[_i];
#define output(j, n, a, t) for (int _i = (j); _i < (n)+(j); _i++) cout<< a[_i] << (((t) && _i != (n)+(j)-1)? ' ' : '\n');
#define kill(x) return cout<< (x) << endl, 0
#define cl const ll
#define fr first
#define sc second
#define lc (v << 1)
#define rc (lc | 1)
#define mid ((l + r) >> 1)
#define All(x) (x).begin(), (x).end()

const long long inf = sizeof(long long) == 4 ? (1e9 + 10) : (3e18), mod = 1e9 + 7, MOD = 998244353;

template <class A,class B> ostream& operator << (ostream& out,const pair<A,B>&a){return out<<'('<<a.first<<", "<<a.second<<')';}
template <class A> ostream& operator << (ostream& out, const vector<A> &a) {
	out<< '['; for (int i = -1; ++i < int(a.size());) out<< a[i] << (i + 1 < int(a.size()) ? ", " : ""); return out<<']'; }
template <class T, typename _t = less <T> > using Tree = tree <T, null_type, _t, rb_tree_tag, tree_order_statistics_node_update>;

cl N = 5e5 + 7, lg = 20;

ll sz [N], cen [N][lg], wcen [N], n, cur1, cur2;
long long dist [N][lg], rn [N], bn [N];
vector <pll> adj [N];
bool hide [N];

ll plant (cl &v, cl &pr = -1) {
	sz[v] = 1;
	for (auto &u : adj[v]) if (!hide[u.fr] && u.fr != pr) sz[v] += plant(u.fr, v);
	return sz[v];
}

inline ll find_centroid (ll v, cl &_n, ll pr = -1) {
	for (ll i = 0; i < SZ(adj[v]); i++) if (sz[adj[v][i].fr] << 1 > _n && !hide[adj[v][i].fr] && adj[v][i].fr != pr)
		pr = v, v = adj[v][i].fr, i = -1;
	return v;
}

void dfs (cl &v, cl &pr) {
	cen[v][cur2] = cur1;
	for (auto [u, w] : adj[v]) if (!hide[u] && u != pr) dist[u][cur2] = dist[v][cur2] + w, dfs(u, v);
}

void centroid_decomposition (ll v = 0, cl &lev = 0) {
	assert(lev < lg);
	v = find_centroid(v, plant(v)); cur1 = v; cur2 = lev;
	wcen[v] = lev;
	cen[v][lev] = v;
	for (auto [u, w] : adj[v]) if (!hide[u]) dist[u][lev] = w, dfs(u, v);
	hide[v] = 1;
	for (auto [u, w] : adj[v]) if (!hide[u]) centroid_decomposition(u, lev + 1);
}

void Init (ll N, ll A[], ll B[], ll D[]) {
	memset(rn, 61, sizeof rn);
	memset(bn, 61, sizeof bn);
	n = N;
	for (ll i = 0; i < n - 1; i++) adj[A[i]].push_back({B[i], D[i]}), adj[B[i]].push_back({A[i], D[i]});
	centroid_decomposition();
	assert((1000 * clock() / CLOCKS_PER_SEC) < 3000);
}

long long Query (ll S, ll X[], ll T, ll Y[]) {
	long long ans = inf;

	for (ll i = 0; i < S; i++) for (ll v = X[i], lev = wcen[v]; ~lev; lev--) {
		v = cen[v][lev];
		rn[v] = min(rn[v], dist[X[i]][lev]);
	}
	for (ll i = 0; i < T; i++) for (ll v = Y[i], lev = wcen[v]; ~lev; lev--) {
		v = cen[v][lev];
		bn[v] = min(bn[v], dist[Y[i]][lev]);
		ans = min(ans, rn[v] + bn[v]);
	}

	for (ll i = 0; i < S; i++) for (ll v = X[i], lev = wcen[v]; ~lev; lev--) {
		v = cen[v][lev];
		rn[v] = inf;
	}
	for (ll i = 0; i < T; i++) for (ll v = Y[i], lev = wcen[v]; ~lev; lev--) {
		v = cen[v][lev];
		bn[v] = inf;
	}

	return ans;
}

#ifdef SINA
ll A [100], B [100], D[100];
int main ()
{
	ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);

	ll _n, q;
	cin>> _n >> q;
	for (ll i = 0; i < _n - 1; i++) {
		cin>> A[i] >> B[i] >> D[i];
	}

	Init(_n, A, B, D);

	while (q--) {
		ll s, t;
		cin>> s >> t;
		for (ll i = 0; i < s; i++) cin>> A[i];
		for (ll i = 0; i < t; i++) cin>> B[i];
		cout<< Query(s, A, t, B) << '\n';
	}

	cerr<< "\nTime elapsed: " << 1000 * clock() / CLOCKS_PER_SEC << "ms\n";

	return 0;
}
/*
7 3
0 1 4
1 2 4
2 3 5
2 4 6
4 5 5
1 6 3
2 2
0 6
3 4
3 2
0 1 3
4 6
1 1
2
5

*/
#endif
# Verdict Execution time Memory Grader output
1 Correct 22 ms 20332 KB Output is correct
2 Correct 481 ms 29368 KB Output is correct
3 Correct 546 ms 29420 KB Output is correct
4 Correct 562 ms 29564 KB Output is correct
5 Correct 639 ms 29804 KB Output is correct
6 Correct 324 ms 29548 KB Output is correct
7 Correct 591 ms 29676 KB Output is correct
8 Correct 561 ms 29420 KB Output is correct
9 Correct 694 ms 29940 KB Output is correct
10 Correct 341 ms 29548 KB Output is correct
11 Correct 592 ms 29452 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 15 ms 20204 KB Output is correct
2 Correct 2880 ms 173228 KB Output is correct
3 Correct 4326 ms 174852 KB Output is correct
4 Correct 948 ms 174036 KB Output is correct
5 Runtime error 4346 ms 395372 KB Execution killed with signal 6
6 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 22 ms 20332 KB Output is correct
2 Correct 481 ms 29368 KB Output is correct
3 Correct 546 ms 29420 KB Output is correct
4 Correct 562 ms 29564 KB Output is correct
5 Correct 639 ms 29804 KB Output is correct
6 Correct 324 ms 29548 KB Output is correct
7 Correct 591 ms 29676 KB Output is correct
8 Correct 561 ms 29420 KB Output is correct
9 Correct 694 ms 29940 KB Output is correct
10 Correct 341 ms 29548 KB Output is correct
11 Correct 592 ms 29452 KB Output is correct
12 Correct 15 ms 20204 KB Output is correct
13 Correct 2880 ms 173228 KB Output is correct
14 Correct 4326 ms 174852 KB Output is correct
15 Correct 948 ms 174036 KB Output is correct
16 Runtime error 4346 ms 395372 KB Execution killed with signal 6
17 Halted 0 ms 0 KB -