Минимальное остовное дерево(алгоритм крускала)

#include <iostream>
#include <cstdio>
#include <vector>
#include <algorithm>
#include<fstream>
using namespace std;


int main()
{
    int m=7;
    vector < pair < int, pair<int, int> > > g(m); // вес - вершина 1 - вершина 2
    vector < pair<int, int> > res;
    ifstream in("input1.txt");
    int n;
    in >> n;
    n++;
    in >> m;
    g.resize(m);
    int x, y, z;
    for (int i = 0; i < m; i++)
    {
        in >> x >> y >> z;
        g[i].first = z;
        g[i].second.first = x;
        g[i].second.second = y;
    }
    int cost = 0;
    
    sort(g.begin(), g.end());
    vector<int> tree_id;
    for (int i = 0; i < n; ++i)
        tree_id[i] = i;
    for (int i = 0; i < m; ++i)
    {
        int a = g[i].second.first, b = g[i].second.second, l = g[i].first;
        if (tree_id[a] != tree_id[b])
        {
            cost += l;
            res.push_back(make_pair(a, b));
            int old_id = tree_id[b], new_id = tree_id[a];
            for (int j = 0; j < n; ++j)
                if (tree_id[j] == old_id)
                    tree_id[j] = new_id;
        }
    }
    for (int i = 0; i < res.size(); i++) {
        cout << res[i].first << " , " << res[i].second<<endl;
    }
}

У меня вылазит какая-то ошибка,связанная с длиной вектора. Прогнал по отладчику, вроде бы она в этой строке res.push_back(make_pair(a, b)); Но не пойму в чем причина. Граф в файле задан так: 5 //количество вершин

7 //количество ребер

1 2 4 //дуги и вес

1 3 1

1 4 7

1 5 2

2 3 3

2 4 1

2 5 6

3 4 3

введите сюда описание изображения

введите сюда описание изображения


Ответы (0 шт):