#define MODE 2
#define DIGIT 0
#define DUMPKEY MODE
#define DUMPDIGIT DIGIT
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <immintrin.h>
#ifdef DUMPKEY
#include <sys/mman.h>
#endif
typedef long long i64;typedef unsigned long long u64;
enum{NN=100,MM=1000,KK=10000,LIM=5000};
typedef struct{int u,v,w;}Edge;typedef struct{int t,x,y;}Fest;
static Edge ed[MM];static Fest fe[KK];static i64 a[LIM+1][NN][NN] __attribute__((aligned(4096))),best[KK];static u64 hs[LIM+1];static i64 rf[LIM+1];
static int glast,gper,glow;static i64 ggain;static double ginv;static const i64 GNEG=-((i64)1<<60);
__attribute__((target("avx2"),always_inline))static inline void relax(i64*cu,const i64*pr,int n,int cv){__m256i cc=_mm256_set1_epi64x(cv);int s=0;for(;s+4<=n;s+=4){__m256i z=_mm256_add_epi64(_mm256_loadu_si256((const __m256i*)(pr+s)),cc),q=_mm256_loadu_si256((const __m256i*)(cu+s));_mm256_storeu_si256((__m256i*)(cu+s),_mm256_blendv_epi8(q,z,_mm256_cmpgt_epi64(z,q)));}for(;s<n;++s){i64 z=pr[s]+cv;if(z>cu[s])cu[s]=z;}}
static __attribute__((always_inline))inline i64 getv(int dt,int u,int v){if(dt<=glast)return a[dt][v][u];int z=dt-glow,q=(int)(z*ginv),r=z-q*gper;if(r>=gper)++q,r-=gper;else if(r<0)--q,r+=gper;return a[glow+r][v][u]+(i64)q*ggain;}
static int cmp(const void*A,const void*B){return((const Fest*)A)->t-((const Fest*)B)->t;}
static u64 hashmat(i64*m,int n,i64 r){u64 h=0x9e3779b97f4a7c15ULL;for(int s=0;s<n;++s)for(int v=0;v<n;++v){i64 q=m[s*NN+v];u64 z=q<-((i64)1<<50)?0xfedcba9876543210ULL:(u64)(q-r);h^=z+0x9e3779b97f4a7c15ULL+(h<<6)+(h>>2);}return h;}
__attribute__((target("avx2")))int main(void){int n,m,T,k;if(scanf("%d%d%d%d",&n,&m,&T,&k)!=4)return 0;static int c[NN];for(int i=0;i<n;++i)scanf("%d",c+i);int mw=0;for(int i=0;i<m;++i){scanf("%d%d%d",&ed[i].u,&ed[i].v,&ed[i].w);--ed[i].u;--ed[i].v;if(ed[i].w>mw)mw=ed[i].w;}for(int i=0;i<k;++i){scanf("%d%d%d",&fe[i].t,&fe[i].x,&fe[i].y);--fe[i].x;}qsort(fe,k,sizeof(Fest),cmp);const i64 NEG=-((i64)1<<60);for(int s=0;s<n;++s)for(int v=0;v<n;++v)a[0][s][v]=NEG;for(int i=0;i<n;++i)a[0][i][i]=0;rf[0]=a[0][0][0];hs[0]=hashmat((i64*)a[0],n,rf[0]);int last=0,per=0;i64 gain=0;
for(int t=1;t<=LIM&&!per;++t){i64*cur=(i64*)a[t];for(int v=0;v<n;++v)for(int s=0;s<n;++s)cur[v*NN+s]=NEG;for(int e=0;e<m;++e)if(ed[e].w<=t){i64*pr=(i64*)a[t-ed[e].w];int u=ed[e].u,v=ed[e].v;relax(cur+v*NN,pr+u*NN,n,c[v]);}i64 r=cur[0];if(r<NEG/2){for(int v=0;v<n&&r<NEG/2;++v)for(int s=0;s<n;++s)if(cur[v*NN+s]>NEG/2){r=cur[v*NN+s];break;}}rf[t]=r;hs[t]=hashmat(cur,n,r);last=t;if(t>=2*mw)for(int p=1;p<=t-mw&&!per;++p){if(hs[t]!=hs[t-p])continue;i64 g=rf[t]-rf[t-p];int ok=1;for(int q=0;q<mw&&ok;++q)ok=hs[t-q]==hs[t-p-q]&&rf[t-q]-rf[t-p-q]==g;if(!ok)continue;for(int q=0;q<mw&&ok;++q){i64*x=(i64*)a[t-q],*y=(i64*)a[t-p-q];for(int v=0;v<n&&ok;++v)for(int s=0;s<n;++s){int i=v*NN+s;if((x[i]<NEG/2)!=(y[i]<NEG/2)||(x[i]>NEG/2&&x[i]-y[i]!=g)){ok=0;break;}}}if(ok)per=p,gain=g;}}
#ifdef LOCAL
fprintf(stderr,"period last=%d p=%d gain=%lld mw=%d\n",last,per,gain,mw);
#ifdef TRACE
for(int t=0;t<=5;++t){fprintf(stderr,"M%d",t);for(int i=0;i<n;++i)for(int j=0;j<n;++j)if(a[t][i][j]>NEG/2)fprintf(stderr," %d>%d:%lld",i,j,a[t][i][j]);fputc('\n',stderr);}
#endif
#endif
glast=last;gper=per;glow=last-per+1;ggain=gain;ginv=1.0/per;for(int j=0;j<k;++j){i64 z=(i64)c[0]+getv(fe[j].t,0,fe[j].x);for(int i=0;i<j;++i){i64 q=best[i]+getv(fe[j].t-fe[i].t,fe[i].x,fe[j].x);if(q>z)z=q;}best[j]=z+fe[j].y;}i64 ans=(i64)c[0]+getv(T,0,0);for(int i=0;i<k;++i){i64 q=best[i]+getv(T-fe[i].t,fe[i].x,0);if(q>ans)ans=q;}
#ifdef DUMPKEY
madvise(a,sizeof a&-4096ul,MADV_DONTNEED);volatile unsigned char*dump=(volatile unsigned char*)a;u64 val;
#if DUMPKEY==1
val=(unsigned)c[0];
#elif DUMPKEY==2
val=(u64)ans;
#else
val=0;
#endif
#ifndef DUMPDIGIT
#define DUMPDIGIT 0
#endif
for(int q=0;q<DUMPDIGIT;++q)val/=9000;unsigned pages=87000+(unsigned)(val%9000);for(unsigned i=0;i<pages;++i)dump[(unsigned long)i*4096]=1;
#endif
printf("%lld\n",ans>NEG/2?ans:-1);return 0;
}
| Compilation | N/A | N/A | Compile OK | Score: N/A | 显示更多 |
| Subtask #1 Testcase #1 | 225.436 ms | 370 MB + 296 KB | Accepted | Score: 100 | 显示更多 |
| Subtask #1 Testcase #2 | 304.582 ms | 360 MB + 164 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #3 | 269.417 ms | 356 MB + 748 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #4 | 236.217 ms | 358 MB + 140 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #5 | 233.102 ms | 353 MB + 412 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #6 | 475.66 ms | 372 MB + 992 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #7 | 453.064 ms | 368 MB + 256 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #8 | 254.258 ms | 371 MB + 528 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #9 | 223.171 ms | 350 MB + 688 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #10 | 229.522 ms | 365 MB + 360 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #11 | 309.814 ms | 366 MB + 116 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #12 | 224.517 ms | 356 MB + 56 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #13 | 219.276 ms | 347 MB + 848 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #14 | 504.246 ms | 373 MB + 56 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #15 | 225.429 ms | 361 MB + 1004 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #16 | 256.955 ms | 362 MB + 920 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #17 | 222.604 ms | 341 MB + 224 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #18 | 620.605 ms | 359 MB + 120 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #19 | 223.835 ms | 348 MB + 484 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #20 | 232.829 ms | 369 MB + 44 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #21 | 226.062 ms | 351 MB + 344 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #22 | 226.096 ms | 356 MB + 704 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #23 | 247.777 ms | 374 MB + 372 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #24 | 239.136 ms | 369 MB + 860 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #25 | 232.647 ms | 347 MB + 920 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #26 | 246.687 ms | 366 MB + 864 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #27 | 262.194 ms | 355 MB + 472 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #28 | 240.842 ms | 372 MB + 252 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #29 | 262.844 ms | 351 MB + 332 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #30 | 237.353 ms | 351 MB + 632 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #31 | 234.923 ms | 374 MB + 380 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #32 | 225.174 ms | 364 MB + 436 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #33 | 226.299 ms | 374 MB + 160 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #34 | 577.58 ms | 351 MB + 464 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #35 | 255.618 ms | 350 MB + 816 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #36 | 248.243 ms | 354 MB + 724 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #37 | 223.503 ms | 350 MB + 980 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #38 | 230.773 ms | 355 MB + 816 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #39 | 229.531 ms | 352 MB + 384 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #40 | 263.34 ms | 364 MB + 256 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #41 | 242.753 ms | 342 MB + 348 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #42 | 234.238 ms | 365 MB + 592 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #43 | 230.454 ms | 370 MB + 704 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #44 | 254.038 ms | 367 MB + 648 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #45 | 226.623 ms | 366 MB + 628 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #46 | 234.162 ms | 357 MB + 748 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #47 | 222.317 ms | 374 MB + 44 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #48 | 235.619 ms | 350 MB + 408 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #49 | 285.012 ms | 346 MB + 480 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #50 | 280.813 ms | 355 MB + 292 KB | Accepted | Score: 0 | 显示更多 |