#include using namespace std; using ll =long long; #define all(v) v.begin(),v.end() #define rep(i,a,b) for(int i=a;i=b;i--) ll INF=1e16; struct edge{ll to,cost;}; typedef pair P; ll V;/*長点数*/ vector> G;// 各頂点から行けるところを記録 vector d;// d[i]=sからdへの最短距離 void dijkstra(ll s) { priority_queue,greater

> que; d=vector (V,INF); d[s]=0; que.push(P(0,s)); while(!que.empty()) { P p=que.top(); que.pop(); ll v=p.second; if(d[v]d[v]+e.cost) { d[e.to]=d[v]+e.cost; que.push(P(d[e.to],e.to)); } } } } ll N,M,K; vector> memo; vector> r; vector A; ll dp(ll i,ll S) { if(memo[i][S]>=0) return memo[i][S]; ll s=A[i]; ll cou=0; ll kyo=0; for(ll j=0;j>N>>M>>K; V=N; A=vector (N); for(ll i=0;i>A[i]; G=vector> (N,vector (0)); for(ll i=0;i>X>>Y>>Z; X--;Y--; edge e={Y,Z}; edge g={X,Z}; G[X].push_back(e); G[Y].push_back(g); } r=vector> (N,vector (N)); for(ll i=0;i> (N,vector ((1<