Pagini recente » Cod sursa (job #2401686) | Cod sursa (job #1213235) | Cod sursa (job #325875) | Cod sursa (job #1443987) | Cod sursa (job #761785)
Cod sursa(job #761785)
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
#define maxn 201010
struct lazy
{
int x,y ;
long long c1,c2 ;
int ind ;
};
lazy mc[maxn];
int n,m ;
int tata[maxn] ;
int cmp(lazy a, lazy b)
{
return ( ( a.c1 < b.c1 ) || ( ( a.c1==b.c1 ) && ( a.c2>b.c2 ) ) ) ;
}
int radacina(int x)
{
if( x != tata[x] )
tata[x] = radacina ( tata[x] ) ;
return tata[x] ;
}
void adauga(int a,int b)
{
tata[a] = b ;
}
int main()
{
freopen("lazy.in","r",stdin);
freopen("lazy.out","w",stdout);
scanf("%d%d",&n,&m);
for(int i=1;i<=m;++i)
{
scanf("%d%d%lld%lld",&mc[i].x,&mc[i].y,&mc[i].c1,&mc[i].c2);
mc[i].ind = i ;
tata[i] = i ;
}
sort ( mc + 1 , mc + m + 1 , cmp ) ;
int ok[maxn] ;
for(int i=1;i<=m;++i)
{
int t1 = radacina ( mc[i].x ) ;
int t2 = radacina ( mc[i].y ) ;
if( t1 != t2 )
{
adauga ( t1 , t2 ) ;
ok [ mc[i].ind ] = 1 ;
}
}
for(int i=1;i<=m;++i)
if( ok[i] )
printf("%d\n",i) ;
return 0;
}