More than two conditions of judgment; #include <stdio.h>
#include <string.h>
#define INF 99999999
int map[202][202];
int sx[202],sy[202];
int lx[202],ly[202];
int n,m,a,link[202];
int www=300005;
int find (int k)
{
int i;
Sx[k]=1;
for (i=1;i<=n;i++)
{
if (Sy[i]==0&&lx[k]+ly[i]==map[k][i])
{
Sy[i]=1;
if (link[i]==-1| | Find (Link[i]))
{
Link[i]=k;
return 1;
}
}
}
return 0;
}
int KM ()
{
int i,j,k,sum=0;
memset (lx,0,sizeof (LX));
memset (ly,0,sizeof (ly));
for (i=1;i<=n;i++)
for (j=1;j<=n;j++)
if (Lx[i]<map[i][j])
LX[I]=MAP[I][J];
for (i=1;i<=n;i++)
{
while (1)
{
memset (sx,0,sizeof (SX));
memset (sy,0,sizeof (SY));
if (find (i))
Break
A=inf;
for (j=1;j<=n;j++)
{
if (Sx[j])
{
for (k=1;k<=n;k++)
if (!sy[k])
{
if (A>lx[j]+ly[k]-map[j][k])
A=LX[J]+LY[K]-MAP[J][K];
}
}
}
if (A==inf)
return 1;
for (j=1;j<=n;j++)
{
if (Sx[j])
Lx[j]-=a;
if (Sy[j])
Ly[j]+=a;
}
}
}
for (i=1;i<=n;i++)
{
if (Map[link[i]][i]==-inf)
return 1;
Sum+=map[link[i]][i];
}
return sum;
}
int main ()
{
int i,j,a,b,c;
while (scanf ("%d%d", &n,&m)!=eof)
{
memset (link,-1,sizeof (link));
for (i=1;i<=n;i++)
for (j=1;j<=n;j++)
Map[i][j]=-inf;
for (i=0;i<m;i++)
{
scanf ("%d%d%d", &a,&b,&c);
if (-c>map[a][b])
Map[a][b]=-c;
}
printf ("%d\n",-km ());
}
return 0;
}