Минимальное остовное дерево(алгоритм крускала)
#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

