多了两个判断条件;
#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;
}