N может быть меньше, чем M, в этом случае это может привести к ошибкам сегментации:
for(int i=1;i<=M;i++){
if((vec[arr1[i]])<min && (vec[arr1[i]])!=0){
min = vec[arr1[i]];
}
}
Вместо этого вы должны смотреть vec [i] вместо vec [arr1 [i]]
Nit: это все равно даст вам WA (неправильный ответ), но не приведет к SIGSEGV, одна из найденных ошибок - только инициализация min в начале, вместо инициализации INT_MAX в l oop over T