人疯掉了
#include<bits/stdc++.h>
#define int long long
using namespace std;
inline int read(void)
{
int x=0,y=1;
char c=getchar();
while(c>'9'||c<'0')
{
if(c=='-')
y=-1;
c=getchar();
}
while(c<='9'&&c>='0')
{
x=x*10+c-'0';
c=getchar();
}
return x*y;
}
const int N=1e6+5,M=1005,INF=2e9+20071112;
int n,m,dp[M];
struct kof{
int ip,t,p;
bool operator<(const kof &T)const{
return p<T.p;
}
};
vector<kof> v[N];
int bk[M],bkk[M];
int a[N],ans[N],ansn;
int x,y,z;
inline int ddp(int x)
{
for(int i=1;i<=200;i++)
dp[i]=INF;
memset(bk,0,sizeof bk);
memset(bkk,0,sizeof bkk);
dp[0]=0;
int cnt=0;
for(auto i:v[x])
{
int a=i.t,b=i.p;
for(int j=0;j<=100;j++)
{
int tmp=min(j+b,100ll);
if(dp[tmp]>dp[j]+a&&bkk[j]!=i.ip)
dp[tmp]=dp[j]+a,bk[tmp]=j,bkk[tmp]=i.ip;
}
}
int ddd=100;
while(ddd)
{
if(dp[ddd]==INF) return 1e9;
if(!ddd)break;
ans[++ansn]=bkk[ddd];
ddd=bk[ddd];
}
return dp[100];
}
signed main()
{
int T=read();
while(T--)
{
n=read(),m=read();
ansn=0;
for(int i=1;i<=n;i++)
a[i]=read();
for(int i=0;i<=n;i++)
v[i].clear();
for(int i=1;i<=m;i++)
{
x=read(),y=read(),z=read();
v[x].emplace_back((kof){i,y,z});
}
int t=0;
bool fk=false;
for(int i=1;i<=n;i++)
{
t+=ddp(i);
if(t>a[i])
{
printf("-1\n");
fk=true;
break;
}
}
if(!fk)
{
printf("%lld\n",ansn);
for(int i=1;i<=ansn;i++)
printf("%lld ",ans[i]);
printf("\n");
}
}
}