Submission #526553

# Submission time Handle Problem Language Result Execution time Memory
526553 2022-02-15T07:56:56 Z kaxzert Harbingers (CEOI09_harbingers) C++17
10 / 100
1000 ms 41932 KB
/**
      ⚡⚡  ⚡⚡      ⚡⚡⚡     ⚡⚡  ⚡⚡  ⚡⚡⚡⚡⚡⚡   ⚡⚡⚡⚡⚡  ⚡⚡⚡⚡⚡⚡  ⚡⚡⚡⚡⚡⚡
      ⚡⚡ ⚡⚡      ⚡⚡⚡⚡     ⚡⚡⚡⚡      ⚡⚡      ⚡⚡       ⚡⚡    ⚡⚡  ⚡⚡⚡⚡⚡⚡
      ⚡⚡⚡⚡      ⚡⚡  ⚡⚡      ⚡⚡      ⚡⚡       ⚡⚡⚡⚡⚡   ⚡⚡⚡⚡⚡⚡     ⚡⚡
      ⚡⚡ ⚡⚡    ⚡⚡⚡⚡⚡⚡     ⚡⚡     ⚡⚡         ⚡⚡       ⚡⚡  ⚡⚡       ⚡⚡
      ⚡⚡  ⚡⚡  ⚡⚡     ⚡⚡  ⚡⚡ ⚡⚡  ⚡⚡⚡⚡⚡⚡  ⚡⚡⚡⚡⚡    ⚡⚡   ⚡⚡     ⚡⚡
**/

#include<bits/stdc++.h>

using namespace std;

#define fto(i, a, b) for(int i = a; i <= b; ++i)
#define fdto(i, a, b) for(int i = a; i >= b; --i)
#define bugarr(a, i, j) cout << #a << "{" << i << "..." << j << "}:"; fto(k, i, j-1) cout << a[k] << ", "; cout << a[j] << endl;
#define ll long long
#define db double
#define ldb long double
#define ff first
#define ss second
#define pb push_back
#define mp make_pair
#define eb emplace_back
#define vt vector
#define all(x) (x).begin(), (x).end()
#define rall(x) (x).rbegin(), (x).rend()
#define trav(i, a) for(auto &i : a)
#define sz(a) (int)a.size()
#define pi(a, b) pair<a, b>
#define fast ios::sync_with_stdio(false); cin.tie(0)

void setIO(string s) {
    if (sz(s) != 0) {
        freopen((s+".inp").c_str(),"r",stdin);
        freopen((s+".out").c_str(),"w",stdout);
    }
}

void setIOusaco(string s) {
    if (sz(s) != 0) {
        freopen((s+".in").c_str(),"r",stdin);
        freopen((s+".out").c_str(),"w",stdout);
    }
}

template<typename T, typename V>
bool ckmin(T &a, V b) {return (b < a)? a = b, true : false;}
template<typename T, typename V>
bool ckmax(T &a, V b) {return (b > a)? a = b, true : false;}

void print(int x) {cout << x;}
void print(long long x) {cout << x;}
void print(unsigned x) {cout << x;}
void print(unsigned long long x) {cout << x;}
void print(double x) {cout << fixed << x;}
void print(long double x) {cout << fixed << x;}
void print(char x) {cout << "'" << x << "'";}
void print(string x) {cout << '"' << x << '"';}
void print(bool x) {cout << (x ? "true" : "false");}

template<typename T, typename V>
void print(const pair<T, V> &x) {cout << '{'; print(x.ff); cout << ", "; print(x.ss); cout << '}';}
template<typename T>
void print(const T &x) {int f = 0; cout << '{'; for (auto &i: x) cout << (f++ ? ", " : ""), print(i); cout << "}";}
void _print() {cout << "]" << endl;}
template <typename T, typename... V>
void _print(T t, V... v) {print(t); if (sizeof...(v)) cout << ", "; _print(v...);}

#ifdef TAP
#define bug(x...) cout << "[" << #x << "] = ["; _print(x)
#else
#define bug(x...) 
#endif

struct cht {
	struct line {
		ll a, b;
		line(ll a, ll b):a(a), b(b){}

		ll intersect(line o) {
			ll x = o.b - b;
			ll y = a - o.a;
			return (x+y-1)/y;
		}

		ll val(ll x) {
			return a*x + b;
		}
	};

	vt<pair<pair<line, ll>, int> > dq;

	void insert(ll a, ll b, int pos) {
		line newline(a, b);
		while(!dq.empty() && dq.back().ff.ss >= dq.back().ff.ff.intersect(newline)) {
			dq.pop_back();
		}	

		if (dq.empty()) {
			dq.pb({{newline, 0}, pos});
		}else dq.pb({{newline, dq.back().ff.ff.intersect(newline)}, pos});
	}

	ll query2(ll x) {
		int pos = lower_bound(all(dq), mp(mp(line(0, 0), x), 0), [=](pair<pair<line, ll>, int> a, pair<pair<line, ll>, int> b) {
			return a.ff.ss < b.ff.ss;
		}) - dq.begin();
		if (pos != 0) --pos;
		return dq[pos].ff.ff.val(x);
	}
};

const int maxN = 100008;
ll s[maxN], f[maxN], v[maxN];
vt<pi(int, ll)> ke[maxN], ans;
cht lines;
int par[maxN];
ll dispar[maxN];

void dfs(int u, ll d = 0, int p = 0) {
	if (u != 1) {
		f[u] = lines.query2(v[u])+d*v[u]+s[u];
	}
	lines.insert(-d, f[u], u);
	trav(v, ke[u]) {
		if (v.ff == p) continue;
		par[u] = p;
		dispar[v.ff] = v.ss;
		dfs(v.ff, d+v.ss, u);
		int sth = u;
		ll d2 = d;
		vt<array<ll, 3> > temp;
		while (lines.dq.back().ss != sth && sth != 1) {
			temp.pb({-d2, f[sth], sth});
			d2 -= dispar[sth];
			sth = par[sth];
		}
		reverse(all(temp));
		trav(c, temp) {
			lines.insert(c[0], c[1], c[2]);
		}
	}

	while (lines.dq.back().ss == u) lines.dq.pop_back();
}

int main() {
    #ifndef TAP 
    setIO("");
    //setIOusaco("harbingers");
    #endif

    fast;
    int n;
    cin >> n;
    fto(i, 1, n-1) {
    	int u, v, w;
    	cin >> u >> v >> w;
    	ke[u].eb(v, w);
    	ke[v].eb(u, w);
    }
    fto(i, 1, n) f[i] = LLONG_MAX;
    f[1] = 0;

    fto(i, 1, n-1) {
    	cin >> s[i+1] >> v[i+1];
    }

    dfs(1);

    fto(i, 2, n) cout << f[i] << " \n"[i == n];

    return 0;
}

Compilation message

harbingers.cpp: In function 'void setIO(std::string)':
harbingers.cpp:34:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   34 |         freopen((s+".inp").c_str(),"r",stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
harbingers.cpp:35:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   35 |         freopen((s+".out").c_str(),"w",stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
harbingers.cpp: In function 'void setIOusaco(std::string)':
harbingers.cpp:41:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   41 |         freopen((s+".in").c_str(),"r",stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
harbingers.cpp:42:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   42 |         freopen((s+".out").c_str(),"w",stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 2 ms 2648 KB Output is correct
2 Incorrect 6 ms 3812 KB Output isn't correct
3 Incorrect 49 ms 18496 KB Output isn't correct
4 Incorrect 70 ms 25712 KB Output isn't correct
5 Runtime error 113 ms 34224 KB Memory limit exceeded
6 Runtime error 159 ms 41932 KB Memory limit exceeded
7 Incorrect 110 ms 18592 KB Output isn't correct
8 Execution timed out 1057 ms 27608 KB Time limit exceeded
9 Execution timed out 1067 ms 20364 KB Time limit exceeded
10 Execution timed out 1099 ms 30128 KB Time limit exceeded