Pagini recente » Cod sursa (job #1387068) | Monitorul de evaluare | Cod sursa (job #1788944) | Cod sursa (job #1292693) | Cod sursa (job #543844)
Cod sursa(job #543844)
#include <stdio.h>
#include <algorithm>
using namespace std;
struct vect
{
int x, y, i;
long long c1, c2;
};
int n, m;
int t[200002];
vect v[200002];
inline int cmp (vect a, vect b)
{
if (a.c1 != b.c1)
return a.c1 < b.c1;
return a.c2 > b.c2;
}
int find (int x)
{
if (t[x] == x)
return x;
t[x] = find (t[x]);
return t[x];
}
int main ()
{
freopen ("lazy.in", "r", stdin);
freopen ("lazy.out", "w", stdout);
scanf ("%d %d", &n, &m);
int i;
for (i = 1; i <= m; i ++)
{
scanf ("%d %d %lld %lld", &v[i].x, &v[i].y, &v[i].c1, &v[i].c2);
v[i].i = i;
}
sort (v + 1, v + m + 1, cmp);
for (i = 1; i <= n; i ++)
t[i] = i;
for (i = 1; i <= m; i ++)
{
if (find(v[i].x) != find(v[i].y))
{
if (i & 1)
t[t[v[i].x]] = t[v[i].y];
else
t[t[v[i].y]] = t[v[i].x];
printf ("%d\n", v[i].i);
}
}
return 0;
}