Pagini recente » Cod sursa (job #2338955) | Cod sursa (job #2801959) | Cod sursa (job #2184973) | Cod sursa (job #1055277) | Cod sursa (job #2657825)
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define ld long double
#define endl "\n"
const int Nmax = 200000;
const int MODULO = 1e9 + 7;
vector < tuple < int, int, ll, ll, int > > muchii;
int tata[Nmax], rg[Nmax];
int getDaddy(int nod) {
if(tata[nod] != nod) {
nod = tata[nod];
}
return nod;
}
void unire(int x, int y) {
if(rg[x] < rg[y]) {
tata[x] = y;
return;
}
if(rg[x] > rg[y]) {
tata[y] = x;
return;
}
if(rg[x] == rg[y]) {
tata[x] = y;
rg[y]++;
}
}
void solve() {
int n, m;
cin >> n >> m;
for(int i = 1; i <= m; i++) {
int x, y;
ll c1, c2;
cin >> x >> y >> c1 >> c2;
muchii.push_back({x, y, c1, c2, i});
muchii.push_back({y, x, c1, c2, i});
}
sort(muchii.begin(), muchii.end(), [&](tuple < int, int, ll, ll, int > a, tuple < int, int, ll, ll, int > b) {
if(get<2>(a) == get<2>(b)) {
return get<3>(a) < get<3>(b);
}
return get<2>(a) > get<2>(b);
});
for(int i = 1; i <= n; i++) {
rg[i] = 1;
tata[i] = i;
}
vector < int > ans;
for(auto it : muchii) {
int x = getDaddy(get<0>(it));
int y = getDaddy(get<1>(it));
//cout << x << " " << y << endl;
if(x != y) {
unire(get<0>(it), get<1>(it));
ans.push_back(get<4>(it));
}
}
for(int i = 0; i <= n - 2; i++) {
cout << ans[i] << endl;
}
}
void fisier() {
freopen("lazy.in" , "r", stdin);
freopen("lazy.out", "w", stdout);
}
int main() {
ios_base::sync_with_stdio(0);
cin .tie(0);
cout.tie(0);
//fisier();
int testCases = 1;
//cin >> testCases;
while(testCases--) {
solve();
}
}