Moglibyście zerknąć na mój kod? ;)
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<vector>
using namespace std;
int n, m, R[7004], j, x, y, x2, y2, Q1, Q2, Q3, c;
struct krawedz
{
int a;
int b;
int cena;
int poz;
bool czy;
};
krawedz D;
vector<krawedz>T;
bool porownaj(const krawedz &luj, const krawedz &muj)
{
return luj.cena <= muj.cena;
}
bool porownaj2(const krawedz &luj1, const krawedz &muj1)
{
return luj1.poz <= muj1.poz;
}
int Find(int w)
{
if (R[w] == w) return w;
int fa = Find(R[w]);
R[w] = fa;
return fa;
}
void Union(int F, int G)
{
R[F] = R[G];
}
int main()
{
ios_base::sync_with_stdio(0);
cin >> n >> m;
for (int i = 1; i <= n; i++) R[i] = i;
for (int i = 0; i < m; i++)
{
cin >> Q1 >> Q2 >> Q3;
D.a = Q1;
D.b = Q2;
D.cena = Q3;
D.poz = i;
D.czy = 0;
T.push_back(D);
}
sort(T.begin(), T.end(), porownaj);
for (int i = 0; i < m; i++)
{
if (T[i].czy == 0 && Find(T[i].a) != Find(T[i].b))
{
x = Find(T[i].a);
y = Find(T[i].b);
T[i].czy = 1;
j = i + 1;
c = T[i].cena;
while (T[j].cena == c)
{
x2 = Find(T[j].a);
y2 = Find(T[j].b);
if ((x2 == x || x2 == y) && (y2 == x || y2 == y) && (x2 != y2)) T[j].czy = 1;
j++;
}
Union(T[i].a, T[i].b);
}
}
sort(T.begin(), T.end(), porownaj2);
for (int i = 0; i < m; i++)
{
if (T[i].czy == 1) cout << "TAK" << endl;
else cout << "NIE" << endl;
}
cin.ignore();
getchar();
return 0;
}
Podczas wykonywania programu dla danych:
6 10
1 2 2
1 6 1
1 5 3
4 1 5
2 6 2
2 3 5
4 3 4
3 5 4
4 5 4
5 6 3
Wyskakuje błąd:
Debug Assertion Failed
Program: C:\Windows\system32\MSVCP120D.dll
File: d:\program files\visual studio ultimate\vc\include\algorithm
Line: 3014
Expression: invalid operator<
For information on how your program can cause assertion failure, see the Visual C++ documentation on asserts.
Korzystam z Visual Studio Ultimate 2013 (MSDNAA).