Pagini recente » Cod sursa (job #427886) | Cod sursa (job #306256) | Cod sursa (job #2873484) | Cod sursa (job #3188498) | Cod sursa (job #1985303)
#include<cstdio>
#include<algorithm>
using namespace std;
struct ura
{
int st;
int dr;
int sum;
};
ura v[2001];
bool sortare (ura a, ura b)
{
if (b.dr == a.dr)
{
return a.st>b.st;
}
return a.dr>b.dr;
}
bool sortare2 (ura a, ura b)
{
if (b.st == a.st)
{
return a.dr>b.dr;
}
return a.st>b.st;
}
int sol[1001];
int main()
{
freopen ("reconst.in","r",stdin);
freopen ("reconst.out","w",stdout);
int n,m,a,b,s,i,j;
scanf ("%d%d",&n,&m);
for (i=1; i<=m; i++)
{
scanf ("%d%d%d",&v[i].st,&v[i].dr,&v[i].sum);
}
int intCurent=m,intMaxim=m;
int m2=m,pp=0,gasite=0;
while (pp==0)
{
sort (v+1,v+m2+1,sortare);
for (i = 1; i <= m2 && gasite != n; i ++)
{
if (v [i].st == v[i].dr && sol[v[i].st] != v[i].sum)
{
sol[v[i].st] = v[i].sum;
gasite++;
}
for (j=i+1; j<=m2&&gasite!=n; j++)
{
if (v[i].dr==v[j].dr)
{
v[++m2].st = v[j].st;
v[m2].dr = v[i].st-1;
v[m2].sum = v[j].sum - v[i].sum;
if (v[m2].st == v[m2].dr&&sol[v[m2].st] != v[m2].sum)
{
sol[v[m2].st] = v[m2].sum;
gasite++;
}
}
}
}
sort (v+1,v+m2+1,sortare2);
for (i = 1; i <= m2 && gasite != n; i ++)
{
if (v [i].st == v[i].dr && sol[v[i].st] != v[i].sum)
{
sol[v[i].st] = v[i].sum;
gasite++;
}
for (j=i+1; j<=m2&&gasite!=n; j++)
{
if (v[i].st==v[j].st)
{
v[++m2].st = v[j].dr + 1;
v[m2].dr = v[i].dr;
v[m2].sum = v[i].sum - v[j].sum;
if (v[m2].st == v[m2].dr && sol[v[m2].st] != v[m2].sum)
{
sol[v[m2].st] = v[m2].sum;
gasite++;
}
}
}
}
if (gasite==n)
pp=1;
}
for (i=1;i<=n;i++)
printf ("%d ",sol[i]);
return 0;
}