Pagini recente » Cod sursa (job #795550) | Cod sursa (job #303049) | Cod sursa (job #758144) | Statistici Fantana Alex (Alex1802) | Cod sursa (job #970263)
Cod sursa(job #970263)
#include <fstream>
#include <vector>
#include <bitset>
#include <queue>
#include <algorithm>
#include <ctime>
#include <utility>
using namespace std;
ifstream cin("lazy.in");
ofstream cout("lazy.out");
const int MAXN = 200005;
struct edge{
int x, y, c1, c2, idx;
}Edge[MAXN];
int padure[MAXN];
class comp{
public:
inline bool operator () (const edge a, const edge b)
{
return (a.c1 < b.c1) || (a.c1 == b.c1 && a.c2 > b.c2);
}
};
inline int find(int x)
{
if(padure[x] != x)
padure[x] = find(padure[x]);
return padure[x];
}
inline void unite(int x, int y)
{
padure[x] = y;
}
int n, m;
int main()
{
cin >> n >> m;
for(int i = 1 ; i <= m ; ++ i)
{
cin >> Edge[i].x >> Edge[i].y >> Edge[i].c1 >> Edge[i].c2;
Edge[i].idx = i;
}
for(int i = 1 ; i <= n ; ++ i)
padure[i] = i;
sort(Edge+1, Edge+m+1, comp());
int k = 0;
for(int i = 1 ; i <= m ; ++ i)
{
if(find(Edge[i].x) != find(Edge[i].y))
{
++ k;
unite(find(Edge[i].x), find(Edge[i].y));
cout << Edge[i].idx << "\n";
if(k == n - 1)
return 0;
}
}
}