Cod sursa(job #810649)

Utilizator dariusdariusMarian Darius dariusdarius Data 10 noiembrie 2012 18:16:47
Problema Lazy Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include<stdio.h>
#include<vector>
#include<algorithm>
using namespace std;
struct MyStruct {
	long long d,c;
	int a,b,nr;
};

const int N = 200010;
int n,m,t[N];
vector<int> sol;
MyStruct a[N];
inline bool cmp(MyStruct a,MyStruct b) 
{
	if(a.d==b.d)
		return a.c>b.c;
	return a.d<b.d;
}
int GetFather(int nod)
{
	if(t[nod]==nod) return nod;
	int rez=GetFather(t[nod]);
	t[nod]=rez;
	return rez;
}
int main()
{
	freopen("lazy.in","r",stdin);
	freopen("lazy.out","w",stdout);
	int i,x,y;
	scanf("%d%d",&n,&m);
	for(i=1;i<=m;++i)
		{scanf("%d%d%d%d",&a[i].a,&a[i].b,&a[i].d,&a[i].c);a[i].nr = i;}
	for(i=1;i<=n;i++)
		t[i]=i;
	sort(a+1,a+m+1,cmp);
	for(i=1;i<=m;i++) 
	{
		x=GetFather(a[i].a);
		y=GetFather(a[i].b);
		if(x!=y) 
		{
			sol.push_back(a[i].nr);
			t[y]=x;
		}
	}
	sort(sol.begin(),sol.end());
	for(i=0;(unsigned int)i<sol.size();i++)
		printf("%d\n",sol[i]);
	return 0;
}