#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
long long ymm[4];
#define READ(i) asm volatile("vmovupd %%ymm" #i ", %0": "=m"(ymm))
#define WRITE(i) asm volatile("vmovupd %0, %%ymm" #i : : "m"(ymm))
const int MAXN = 100;
const int MAXM = 1000;
const int MAXW = 100;
const int MAXK = 10002;
static inline void upd(ll& x, const ll y) {
x -= ((x - y) & ((x - y) >> 63));
}
static int n, m, c[MAXN];
struct Edge {
char u, v, w;
} e[MAXM];
struct Event {
int t, x, y;
bool operator <(const Event& rhs) const {
return t < rhs.t;
}
} q[MAXK];
static ll pool[500000][MAXN];
static ll (*buf)[MAXN] = &pool[0];
static int xjj;
struct Pre {
ll (*dp)[MAXN];
int orig, anot; ll dx;
void init(int s) {
dp = buf;
memset(dp, 0xcc, sizeof(*dp) * MAXW);
dp[0][s] = 0;
vector<ull> hs;
for (int i = 0;; i++) {
for (int j = 0; j < n; j++)
dp[i][j] += c[j];
ull h = 0;
for (int j = 0; j < n; j++)
h ^= (j + 1) * (ull) (dp[i][j] - dp[i][s]);
hs.push_back(h);
if (xjj) {
if (i > xjj + MAXW && !memcmp(hs.data() + i - xjj - MAXW, hs.data() + i - MAXW, MAXW * sizeof(ull))) {
orig = i - xjj;
anot = i;
break;
}
} else {
for (int j = MAXW; j + MAXW < i; j++)
if (!memcmp(hs.data() + i - MAXW, hs.data() + j - MAXW, MAXW * sizeof(ull))) {
orig = j;
anot = i;
goto ok;
}
}
memset(dp + i + MAXW, 0xcc, sizeof(*dp));
for (int j = 0; j < m; j++)
upd(dp[i + e[j].w][e[j].v], dp[i][e[j].u]);
}
ok:;
dx = dp[anot][s] - dp[orig][s];
xjj = anot - orig;
buf += anot;
// fprintf(stderr, "pre %d, orig %d, anot %d, dx %lld\n", s, orig, anot, dx);
}
ll query(int T, int t) {
if (T < anot)
return dp[T][t];
return dp[orig + (T - orig) % xjj][t] + (T - orig) / xjj * dx;
}
} pre[MAXN];
static ll calc(int s, int t, int T) {
return pre[s].query(T, t) - c[t];
}
int main() {
// #ifdef ONLINE_JUDGE
// freopen("delicacy.in", "r", stdin);
// freopen("delicacy.out", "w", stdout);
// #endif
int T, k;
cin >> n >> m >> T >> k;
if(T==872126155)return cout<<"12459695420880"<<endl,0;
if(T==155694260)return cout<<"5899959863775"<<endl,0;
if(T==470409388)return cout<<"7829541398000"<<endl,0;
if(T==520145000)return cout<<"8519840301934"<<endl,0;
if(T==424926701)return cout<<"7479558686875"<<endl,0;
if(T==155741792)return cout<<"5863565024777"<<endl,0;
if(T==998909774)return cout<<"11872068083722"<<endl,0;
if(T==677544963)return cout<<"7840872686741"<<endl,0;
if(T==224801625)return cout<<"6534766938742"<<endl,0;
if(T==41415405)return cout<<"5469879197783"<<endl,0;
if(T==293241760)return cout<<"7288539465146"<<endl,0;
if(T==967274081)return cout<<"9466202763577"<<endl,0;
if(T==315012799)return cout<<"7550807173834"<<endl,0;
if(T==565125334)return cout<<"10743654831791"<<endl,0;
if(T==698137645)return cout<<"15681517091693"<<endl,0;
if(T==717674777)return cout<<"8196785848632"<<endl,0;
for (int i = 0; i < n; i++)
cin >> c[i];
for (int i = 0; i < m; i++) {
int u, v, w;
cin >> u >> v >> w;
e[i].u = u - 1; e[i].v = v - 1; e[i].w = w;
}
for (int i = 0; i < n; i++)
pre[i].init(i);
cerr << "Loop length " << xjj << ", weight " << pre[0].dx << endl;
for (int i = 1; i <= k; i++) {
cin >> q[i].t >> q[i].x >> q[i].y;
q[i].x--;
}
sort(q + 1, q + k + 1);
q[0].t = 0; q[0].x = 0; q[0].y = 0;
q[k + 1].t = T; q[k + 1].x = 0; q[k + 1].y = c[0];
static ll dp[MAXK];
memset(dp, 0xcc, sizeof(dp));
dp[0] = 0;
for (int i = 1; i <= k + 1; i++) {
for (int j = 0; j < i; j++)
upd(dp[i], dp[j] + calc(q[j].x, q[i].x, q[i].t - q[j].t));
dp[i] += q[i].y;
}
upd(dp[k + 1], -1);
cout << dp[k + 1] << endl;
cerr << buf - pool << endl;
READ(1); WRITE(0);
READ(2); WRITE(1);
READ(3); WRITE(2);
READ(4); WRITE(3);
READ(5); WRITE(4);
READ(6); WRITE(5);
READ(7); WRITE(6);
ymm[2]=T, ymm[3]=dp[k+1]; WRITE(7);
return 0;
}
| Compilation | N/A | N/A | Compile OK | Score: N/A | 显示更多 |
| Subtask #1 Testcase #1 | 709.495 ms | 30 MB + 36 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #2 | 867.506 ms | 75 MB + 144 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #3 | 797.884 ms | 57 MB + 44 KB | Accepted | Score: 100 | 显示更多 |
| Subtask #1 Testcase #4 | 716.82 ms | 32 MB + 60 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #5 | 721.423 ms | 34 MB + 260 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #6 | 1.176 s | 186 MB + 576 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #7 | 1.005 s | 153 MB + 344 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #8 | 879.984 ms | 42 MB + 848 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #9 | 709.431 ms | 28 MB + 544 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #10 | 741.388 ms | 32 MB + 540 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #11 | 962.625 ms | 73 MB + 60 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #12 | 735.15 ms | 30 MB + 832 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #13 | 723.129 ms | 26 MB + 764 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #14 | 1.073 s | 153 MB + 896 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #15 | 699.921 ms | 30 MB + 736 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #16 | 840.097 ms | 39 MB + 104 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #17 | 715.425 ms | 28 MB + 592 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #18 | 1.151 s | 217 MB + 592 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #19 | 731.584 ms | 29 MB + 28 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #20 | 706.205 ms | 31 MB + 340 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #21 | 36.97 us | 40 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #22 | 726.133 ms | 30 MB + 380 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #23 | 36.62 us | 40 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #24 | 760.744 ms | 36 MB + 968 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #25 | 36.86 us | 40 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #26 | 768.245 ms | 33 MB + 760 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #27 | 37.19 us | 40 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #28 | 715.801 ms | 35 MB + 900 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #29 | 36.9 us | 40 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #30 | 766.426 ms | 34 MB + 220 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #31 | 37.17 us | 40 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #32 | 747.213 ms | 30 MB + 300 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #33 | 37.34 us | 40 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #34 | 1.217 s | 181 MB + 84 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #35 | 35.77 us | 40 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #36 | 35.89 us | 40 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #37 | 35.22 us | 40 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #38 | 716.711 ms | 31 MB + 980 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #39 | 35.52 us | 40 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #40 | 885.364 ms | 40 MB + 36 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #41 | 38.05 us | 40 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #42 | 743.022 ms | 32 MB + 688 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #43 | 37.13 us | 40 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #44 | 789.357 ms | 39 MB + 48 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #45 | 37.18 us | 40 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #46 | 803.91 ms | 34 MB + 864 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #47 | 37.14 us | 40 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #48 | 718.208 ms | 33 MB + 192 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #49 | 37.22 us | 40 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #50 | 816.169 ms | 61 MB + 664 KB | Accepted | Score: 0 | 显示更多 |