题目链接
#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>
#include <array>
using namespace std;
#define int long long
void solve()
{
int n,m;
cin>>n>>m;
vector<int>lim(n);
for(int i=0;i<n;i++)cin>>lim[i];
vector<vector<array<int,3>>> a(n);
for(int i=0;i<m;i++)
{
int e,t,p;
cin>>e>>t>>p;
e--;
a[e].push_back({t,p,i});
}
vector<int>res;
int sum=0;
for(int i=0;i<n;i++)
{
int N = a[i].size();
vector dp(N+1,vector<int>(101,2e9+1));
dp[0][0]=0;
for(int j=0;j<N;j++)
{
dp[j+1]=dp[j];
auto [t,p,_] = a[i][j];
for(int k=0;k<=100;k++)
{
int nk=min(100ll,k+p);
dp[j+1][nk]=min(dp[j+1][nk],dp[j][k]+t);
}
}
sum+=dp[N][100];
if(sum>lim[i])
{
cout<<-1<<'\n';
return ;
}
int nd=100;
for(int j=N-1;j>=0;j--)
{
auto [t,p,id] = a[i][j];
if(dp[j+1][nd]==dp[j][nd])continue;
res.push_back(id);
for(int k=0;k<=100;k++)
{
int nk=min(100ll,k+p);
if(nk==nd&&dp[j][k]+t==dp[j+1][nk])
{
nd=k;
break;
}
}
}
}
cout<<res.size()<<'\n';
for(auto x : res)cout<<x+1<<" ";
cout<<'\n';
}
signed main()
{
int T;cin>>T;
while(T--)solve();
}