Idea: Establecemos un súper punto de origen, el valor de cada artículo desde el punto de origen representa la compra directa, y luego construimos el mapa de acuerdo con el método de intercambio, para asegurarnos de que esté dentro del límite de nivel, y debemos cambiar a elemento n. ° 1, por lo que enumeramos Ejecutar la ruta más corta desde el nivel del elemento 1-m-el nivel del elemento 1
#include<bits/stdc++.h>
#define re register
using namespace std;
typedef long long ll;
const double eps=1e-7;
const int INF=1e9;
const int N=105;
int n,m;
int x,y;
int cnt;
int tot;
int a,c;
int dis[N];
bool vis[N];
int level[N];
int mp[N][N];
int dij(int l,int r)
{
memset(dis,0x3f,sizeof dis);
memset(vis,0,sizeof vis);
dis[0]=0;
// vis[0]=1;
for(int i=1;i<=n+1;i++)
{
int t=-1;
for(int j=0;j<=n;j++)
if(!vis[j]&&(t==-1||dis[t]>dis[j])) t=j;
vis[t]=1;
for(int j=1;j<=n;j++)
if(level[j]>=l&&level[j]<=r)
dis[j]=min(dis[j],dis[t]+mp[t][j]);
}
return dis[1];
}
int main()
{
memset(mp,0x3f,sizeof mp);
cin>>m>>n;
for(int i=1;i<=n;i++)
{
int val,cnt;
cin>>val>>level[i]>>cnt;
mp[0][i]=min(mp[0][i],val);
for(int j=1;j<=cnt;j++)
{
int id,w;
cin>>id>>w;
mp[id][i]=min(mp[id][i],w);
}
}
int ans=INF;
for(int i=level[1]-m;i<=level[1];i++) ans=min(ans,dij( i, i+m));
cout<<ans;
return 0;
}