//ᴇᴀᴄʜ ᴘᴇʀꜱᴏɴ ᴡɪʟʟ ᴏɴʟʏ ʜᴀᴠᴇ ᴡʜᴀᴛ ᴛʜᴇʏ ᴇɴᴅᴇᴀᴠᴏᴜʀᴇᴅ ᴛᴏᴡᴀʀᴅꜱ [53:39]
//Author: Sazid Hasan
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef double dl;
typedef vector<int> vi;
typedef vector<vector<int>> vii;
typedef vector<ll> vl;
typedef vector<bool> vb;
typedef pair<int,int> pii;
typedef pair<ll, ll> pll;
#define ff first
#define ss second
#define all(a) a.begin(),a.end()
#define gcd(a,b) __gcd(a,b)
#define lcm(a,b) (a*(b/gcd(a,b)))
#define file(); freopen("input.txt", "r", stdin);freopen("output.txt", "w", stdout);
#define spc " "
#ifdef ONLINE_JUDGE
#define debarr(array)
#define deb(x)
#define del
#define debug(...)
#else
#define debarr(array) for(int w = 0; w < array.size(); w++) cerr << #array << "-" << w << " = " << array[w] << endl;
#define deb(x) cerr << #x << " = " << x << endl;
#define del cerr << '\n';
#define debug(...) _debug(#__VA_ARGS__, __VA_ARGS__);
template <class X, class Y>
ostream& operator<<(ostream& os, const pair<X, Y>& p) {
return os << "(" << p.first << ", " << p.second << ")";
}
template <class Ch, class Tr, class Container>
basic_ostream<Ch, Tr>& operator<<(basic_ostream<Ch, Tr>& os, const Container& x) {
int i = 0, n = distance
(x.begin(), x.end());
os << "{ ";
for (const auto& y : x)
os << y << (++i < n ? ", " : "");
return os << " }";
}
template <typename... Args>
void _debug(const char* names, Args&&... args) {
string_view s(names);
cerr << "{ ";
size_t i = 0, cnt = 0, n = sizeof...(args);
auto next = [&]() {
while (i < s.size() && (s[i] == ' ' || s[i] == ',')) ++i;
size_t st = i;
while (i < s.size() && s[i] != ',') ++i;
return s.substr(st, i - st);
};
((cerr << next() << ": " << args << (++cnt < n ? ", " : "")), ...);
cerr << " }" << '\n';
}
#endif
const double PI = acos(-1);
const int MOD = 1000000007;
const int inf = (2147483647);
const ll uinf = (1LL<<61);
const double EPS = 1e-6;
const int MAXN = 1e5+10;
const int adjust = 4005;
const int sz = adjust*2+2;
class CHT{
public:
struct line{
ll slope, C;
line(ll slope, ll C): slope(slope), C(C) {}
ll val(ll x){
return slope*x + C;
}
ll intersect(line & other){
return (other.C-C + (slope-other.slope-1)) / (slope-other.slope);
}
};
deque<pair<ll, line>> hull;
void init(vector<ll> & cons, vector<pll> &queries, vl & ans, int going = -1){
hull.clear();
sort(all(queries));
for(int i = sz-1; i >= 0; i--){
if(cons[i]==uinf) continue;
line newLine(i-adjust, cons[i]);
while(hull.size()>0 && hull.back().ff >= hull.back().ss.intersect(newLine)) hull.pop_back();
if(hull.empty()) hull.push_back({0, newLine});
else hull.push_back({hull.back().ss.intersect(newLine), newLine});
}
for(auto &x: queries){
ans[x.ss] = min(ans[x.ss], query(x.ff));
}
}
ll query(ll x){
if(hull.empty()) return uinf;
while(hull.size()>1 && hull[1].ff <= x) hull.pop_front();
return hull.front().ss.val(x);
}
};
struct edge{
int v, cost, r;
edge(){
cin >> v >> cost >> r;
}
};
bool solve(){
int n, m, q; cin >> n >> m >> q;
vector<vl> lines(n+1, vl(sz, uinf));
vector<vector<edge>> adj(n+1);
vi deg(n+5);
for(int i = 1; i <= m; i++){
int a; cin >> a;
adj[a].emplace_back();
deg[adj[a].back().v]++;
}
vl ans(q, LONG_LONG_MAX);
vector<vector<pll>> queries(n+1);
for(int i = 0; i < q; i++){
int l, r, x; cin >> l >> r >> x;
queries[x].push_back({l, i});
queries[x].push_back({r, i});
}
lines[1][adjust] = 0;
CHT cht;
queue<int> order;
for(int i = 1; i <= n; i++){
if(deg[i]==0) order.push(i);
}
while(!order.empty()){
int i = order.front(); order.pop();
cht.init(lines[i], queries[i], ans, i);
for(auto x: adj[i]){
for(int k = 0; k < sz; k++){
if(lines[i][k]<uinf) lines[x.v][k+x.r] = min(lines[x.v][k+x.r], lines[i][k]+x.cost);
}
deg[x.v]--;
if(!deg[x.v]) order.push(x.v);
}
lines[i].clear();
}
for(int i = 0; i < q; i++){
if(ans[i]>=uinf){
cout << "sorry" << endl;
continue;
}
cout << ans[i] << endl;
}
return 1;
}
int main(){
ios::sync_with_stdio(false); cin.tie(nullptr);
int testcase = 1;
//cin >> testcase;
for(int tc = 1; tc <= testcase; tc++){
//cerr << "TESTCASE - " << tc << endl;
solve();
//cout << (solve() ? "YES" : "NO") << '\n';
cerr << endl;
}
return 0;
}
Ly/htIfhtIDhtITKnCDhtJjhtIfKgOqcseG0j8m0IOG0ocmqyp/KnyDhtI/JtMqfyo8gypzhtIDhtKDhtIcg4bShypzhtIDhtJsg4bSbypzhtIfKjyDhtIfJtOG0heG0h+G0gOG0oOG0j+G0nMqA4bSH4bSFIOG0m+G0j+G0oeG0gMqA4bSF6pyxIFs1MzozOV0KLy9BdXRob3I6IFNhemlkIEhhc2FuCiNpbmNsdWRlIDxiaXRzL3N0ZGMrKy5oPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdHlwZWRlZiBsb25nIGxvbmcgICAgICAgICAgICAgIGxsOwp0eXBlZGVmIGRvdWJsZSAgICAgICAgICAgICAgICAgZGw7CnR5cGVkZWYgdmVjdG9yPGludD4gICAgICAgICAgICB2aTsKdHlwZWRlZiB2ZWN0b3I8dmVjdG9yPGludD4+ICAgIHZpaTsKdHlwZWRlZiB2ZWN0b3I8bGw+ICAgICAgICAgICAgIHZsOwp0eXBlZGVmIHZlY3Rvcjxib29sPiAgICAgICAgICAgdmI7CnR5cGVkZWYgcGFpcjxpbnQsaW50PiAgICAgICAgIHBpaTsKdHlwZWRlZiBwYWlyPGxsLCBsbD4gICAgICAgICAgcGxsOwoKI2RlZmluZSBmZiAgICAgICAgICAgICAgICBmaXJzdAojZGVmaW5lIHNzICAgICAgICAgICAgICAgIHNlY29uZAojZGVmaW5lIGFsbChhKSAgICAgICAgICAgIGEuYmVnaW4oKSxhLmVuZCgpCiNkZWZpbmUgZ2NkKGEsYikgICAgICAgICAgX19nY2QoYSxiKQojZGVmaW5lIGxjbShhLGIpICAgICAgICAgIChhKihiL2djZChhLGIpKSkKI2RlZmluZSBmaWxlKCk7ICAgICAgICAgICBmcmVvcGVuKCJpbnB1dC50eHQiLCAiciIsIHN0ZGluKTtmcmVvcGVuKCJvdXRwdXQudHh0IiwgInciLCBzdGRvdXQpOwojZGVmaW5lIHNwYyAgICAgICAgICAgICAgICIgIgoKI2lmZGVmIE9OTElORV9KVURHRQogICAgI2RlZmluZSBkZWJhcnIoYXJyYXkpCiAgICAjZGVmaW5lIGRlYih4KQogICAgI2RlZmluZSBkZWwKICAgICNkZWZpbmUgZGVidWcoLi4uKQojZWxzZQogICAgI2RlZmluZSBkZWJhcnIoYXJyYXkpICBmb3IoaW50IHcgPSAwOyB3IDwgYXJyYXkuc2l6ZSgpOyB3KyspIGNlcnIgPDwgI2FycmF5IDw8ICItIiA8PCB3IDw8ICIgPSAiIDw8IGFycmF5W3ddIDw8IGVuZGw7CiAgICAjZGVmaW5lIGRlYih4KSAgICAgICAgIGNlcnIgPDwgI3ggPDwgIiA9ICIgPDwgeCA8PCBlbmRsOwogICAgI2RlZmluZSBkZWwgY2VyciA8PCAnXG4nOwogICAgI2RlZmluZSBkZWJ1ZyguLi4pIF9kZWJ1ZygjX19WQV9BUkdTX18sIF9fVkFfQVJHU19fKTsKICAgIAogICAgdGVtcGxhdGUgPGNsYXNzIFgsIGNsYXNzIFk+CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KG9zdHJlYW0mIG9zLCBjb25zdCBwYWlyPFgsIFk+JiBwKSB7CiAgICAgICAgcmV0dXJuIG9zIDw8ICIoIiA8PCBwLmZpcnN0IDw8ICIsICIgPDwgcC5zZWNvbmQgPDwgIikiOwogICAgfQogICAgCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgQ2gsIGNsYXNzIFRyLCBjbGFzcyBDb250YWluZXI+CiAgICBiYXNpY19vc3RyZWFtPENoLCBUcj4mIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxDaCwgVHI+JiBvcywgY29uc3QgQ29udGFpbmVyJiB4KSB7CiAgICAgICAgaW50IGkgPSAwLCBuID0gZGlzdGFuY2UKICAgICAgICAoeC5iZWdpbigpLCB4LmVuZCgpKTsKICAgICAgICBvcyA8PCAieyAiOwogICAgICAgIGZvciAoY29uc3QgYXV0byYgeSA6IHgpCiAgICAgICAgICAgIG9zIDw8IHkgPDwgKCsraSA8IG4gPyAiLCAiIDogIiIpOwogICAgICAgIHJldHVybiBvcyA8PCAiIH0iOwogICAgfQogICAgCiAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gQXJncz4KICAgIHZvaWQgX2RlYnVnKGNvbnN0IGNoYXIqIG5hbWVzLCBBcmdzJiYuLi4gYXJncykgewogICAgICAgIHN0cmluZ192aWV3IHMobmFtZXMpOwogICAgICAgIGNlcnIgPDwgInsgIjsKICAgICAgICBzaXplX3QgaSA9IDAsIGNudCA9IDAsIG4gPSBzaXplb2YuLi4oYXJncyk7CiAgICAKICAgICAgICBhdXRvIG5leHQgPSBbJl0oKSB7CiAgICAgICAgICAgIHdoaWxlIChpIDwgcy5zaXplKCkgJiYgKHNbaV0gPT0gJyAnIHx8IHNbaV0gPT0gJywnKSkgKytpOwogICAgICAgICAgICBzaXplX3Qgc3QgPSBpOwogICAgICAgICAgICB3aGlsZSAoaSA8IHMuc2l6ZSgpICYmIHNbaV0gIT0gJywnKSArK2k7CiAgICAgICAgICAgIHJldHVybiBzLnN1YnN0cihzdCwgaSAtIHN0KTsKICAgICAgICB9OwogICAgCiAgICAgICAgKChjZXJyIDw8IG5leHQoKSA8PCAiOiAiIDw8IGFyZ3MgPDwgKCsrY250IDwgbiA/ICIsICIgOiAiIikpLCAuLi4pOwogICAgICAgIGNlcnIgPDwgIiB9IiA8PCAnXG4nOwogICAgfQojZW5kaWYKCgpjb25zdCBkb3VibGUgUEkgPSAgICAgICAgIGFjb3MoLTEpOwpjb25zdCBpbnQgTU9EID0gICAgICAgICAgIDEwMDAwMDAwMDc7CmNvbnN0IGludCBpbmYgPSAgICAgICAgICAgKDIxNDc0ODM2NDcpOwpjb25zdCBsbCB1aW5mID0gICAgICAgICAgICgxTEw8PDYxKTsKY29uc3QgZG91YmxlIEVQUyA9ICAgICAgICAxZS02Owpjb25zdCBpbnQgTUFYTiA9ICAgICAgICAgIDFlNSsxMDsKCmNvbnN0IGludCBhZGp1c3QgPSA0MDA1Owpjb25zdCBpbnQgc3ogPSBhZGp1c3QqMisyOwoKCmNsYXNzIENIVHsKICAgIHB1YmxpYzoKICAgIHN0cnVjdCBsaW5lewogICAgICAgIGxsIHNsb3BlLCBDOwogICAgICAgIGxpbmUobGwgc2xvcGUsIGxsIEMpOiBzbG9wZShzbG9wZSksIEMoQykge30KICAgICAgICBsbCB2YWwobGwgeCl7CiAgICAgICAgICAgIHJldHVybiBzbG9wZSp4ICsgQzsKICAgICAgICB9CiAgICAgICAgbGwgaW50ZXJzZWN0KGxpbmUgJiBvdGhlcil7CiAgICAgICAgICAgIHJldHVybiAob3RoZXIuQy1DICsgKHNsb3BlLW90aGVyLnNsb3BlLTEpKSAvIChzbG9wZS1vdGhlci5zbG9wZSk7CiAgICAgICAgfQogICAgfTsKICAgIGRlcXVlPHBhaXI8bGwsIGxpbmU+PiBodWxsOwogICAgdm9pZCBpbml0KHZlY3RvcjxsbD4gJiBjb25zLCB2ZWN0b3I8cGxsPiAmcXVlcmllcywgdmwgJiBhbnMsIGludCBnb2luZyA9IC0xKXsKICAgICAgICBodWxsLmNsZWFyKCk7CiAgICAgICAgc29ydChhbGwocXVlcmllcykpOwogICAgICAgIGZvcihpbnQgaSA9IHN6LTE7IGkgPj0gMDsgaS0tKXsKICAgICAgICAgICAgaWYoY29uc1tpXT09dWluZikgY29udGludWU7CiAgICAgICAgICAgIGxpbmUgbmV3TGluZShpLWFkanVzdCwgY29uc1tpXSk7CiAgICAgICAgICAgIHdoaWxlKGh1bGwuc2l6ZSgpPjAgJiYgaHVsbC5iYWNrKCkuZmYgPj0gaHVsbC5iYWNrKCkuc3MuaW50ZXJzZWN0KG5ld0xpbmUpKSBodWxsLnBvcF9iYWNrKCk7CiAgICAgICAgICAgIGlmKGh1bGwuZW1wdHkoKSkgaHVsbC5wdXNoX2JhY2soezAsIG5ld0xpbmV9KTsKICAgICAgICAgICAgZWxzZSBodWxsLnB1c2hfYmFjayh7aHVsbC5iYWNrKCkuc3MuaW50ZXJzZWN0KG5ld0xpbmUpLCBuZXdMaW5lfSk7CiAgICAgICAgfQogICAgICAgIGZvcihhdXRvICZ4OiBxdWVyaWVzKXsKICAgICAgICAgICAgYW5zW3guc3NdID0gbWluKGFuc1t4LnNzXSwgcXVlcnkoeC5mZikpOwogICAgICAgIH0KICAgIH0KICAgIGxsIHF1ZXJ5KGxsIHgpewogICAgICAgIGlmKGh1bGwuZW1wdHkoKSkgcmV0dXJuIHVpbmY7CiAgICAgICAgd2hpbGUoaHVsbC5zaXplKCk+MSAmJiBodWxsWzFdLmZmIDw9IHgpIGh1bGwucG9wX2Zyb250KCk7CiAgICAgICAgcmV0dXJuIGh1bGwuZnJvbnQoKS5zcy52YWwoeCk7CiAgICB9Cn07CgpzdHJ1Y3QgZWRnZXsKICAgIGludCB2LCBjb3N0LCByOwogICAgZWRnZSgpewogICAgICAgIGNpbiA+PiB2ID4+IGNvc3QgPj4gcjsKICAgIH0KfTsKCmJvb2wgc29sdmUoKXsKICAgIGludCBuLCBtLCBxOyBjaW4gPj4gbiA+PiBtID4+IHE7CiAgICB2ZWN0b3I8dmw+IGxpbmVzKG4rMSwgdmwoc3osIHVpbmYpKTsKICAgIHZlY3Rvcjx2ZWN0b3I8ZWRnZT4+IGFkaihuKzEpOwogICAgdmkgZGVnKG4rNSk7CiAgICBmb3IoaW50IGkgPSAxOyBpIDw9IG07IGkrKyl7CiAgICAgICAgaW50IGE7IGNpbiA+PiBhOwogICAgICAgIGFkalthXS5lbXBsYWNlX2JhY2soKTsKICAgICAgICBkZWdbYWRqW2FdLmJhY2soKS52XSsrOwogICAgfQogICAgdmwgYW5zKHEsIExPTkdfTE9OR19NQVgpOwogICAgdmVjdG9yPHZlY3RvcjxwbGw+PiBxdWVyaWVzKG4rMSk7CiAgICBmb3IoaW50IGkgPSAwOyBpIDwgcTsgaSsrKXsKICAgICAgICBpbnQgbCwgciwgeDsgY2luID4+IGwgPj4gciA+PiB4OwogICAgICAgIHF1ZXJpZXNbeF0ucHVzaF9iYWNrKHtsLCBpfSk7CiAgICAgICAgcXVlcmllc1t4XS5wdXNoX2JhY2soe3IsIGl9KTsKICAgIH0KICAgIGxpbmVzWzFdW2FkanVzdF0gPSAwOwogICAgQ0hUIGNodDsKICAgIHF1ZXVlPGludD4gb3JkZXI7CiAgICBmb3IoaW50IGkgPSAxOyBpIDw9IG47IGkrKyl7CiAgICAgICAgaWYoZGVnW2ldPT0wKSBvcmRlci5wdXNoKGkpOwogICAgfQogICAgd2hpbGUoIW9yZGVyLmVtcHR5KCkpewogICAgICAgIGludCBpID0gb3JkZXIuZnJvbnQoKTsgb3JkZXIucG9wKCk7CiAgICAgICAgY2h0LmluaXQobGluZXNbaV0sIHF1ZXJpZXNbaV0sIGFucywgaSk7CiAgICAgICAgZm9yKGF1dG8geDogYWRqW2ldKXsKICAgICAgICAgICAgZm9yKGludCBrID0gMDsgayA8IHN6OyBrKyspewogICAgICAgICAgICAgICAgaWYobGluZXNbaV1ba108dWluZikgbGluZXNbeC52XVtrK3gucl0gPSBtaW4obGluZXNbeC52XVtrK3gucl0sIGxpbmVzW2ldW2tdK3guY29zdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZGVnW3gudl0tLTsKICAgICAgICAgICAgaWYoIWRlZ1t4LnZdKSBvcmRlci5wdXNoKHgudik7CiAgICAgICAgfQogICAgICAgIGxpbmVzW2ldLmNsZWFyKCk7CiAgICB9CiAgICBmb3IoaW50IGkgPSAwOyBpIDwgcTsgaSsrKXsKICAgICAgICBpZihhbnNbaV0+PXVpbmYpewogICAgICAgICAgICBjb3V0IDw8ICJzb3JyeSIgPDwgZW5kbDsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIGNvdXQgPDwgYW5zW2ldIDw8IGVuZGw7CiAgICB9CgoKCgogICAgcmV0dXJuIDE7Cn0KCmludCBtYWluKCl7CiAgICBpb3M6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7IGNpbi50aWUobnVsbHB0cik7CiAgICBpbnQgdGVzdGNhc2UgPSAxOwogICAgLy9jaW4gPj4gdGVzdGNhc2U7CiAgICBmb3IoaW50IHRjID0gMTsgdGMgPD0gdGVzdGNhc2U7IHRjKyspewogICAgICAgIC8vY2VyciA8PCAiVEVTVENBU0UgLSAiIDw8IHRjIDw8IGVuZGw7CiAgICAgICAgc29sdmUoKTsKICAgICAgICAvL2NvdXQgPDwgKHNvbHZlKCkgPyAiWUVTIiA6ICJOTyIpIDw8ICdcbic7CiAgICAgICAgY2VyciA8PCBlbmRsOwogICAgfQoKICAgIHJldHVybiAwOwp9