Bellman Ford(warm up-2 1005)
数据弱,代码有问题,等待修正
#include <iostream>
using namespace std;
__int64 lmax=0x7FFFFFFF;
const long MAXN=1200;
__int64 hash[MAXN][MAXN];
__int64 Dis[MAXN];
long Start,End;
long m,n;//点,边
int main()
{
lmax=lmax<<10;
long T;
scanf("%ld",&T);
while (T--)
{
scanf("%ld",&m);
scanf("%ld %ld",&Start,&End);
scanf("%ld",&n);
long i,ii;
for (i=0;i<MAXN;++i)
{
Dis[i]=lmax;
for (ii=0;ii<MAXN;++ii)
{
hash[i][ii]=lmax;
}
}
for (i=0;i<n;++i)
{
long from,to;
__int64 cost;
scanf("%ld %ld %I64d",&from,&to,&cost);
if (cost<hash[from][to])
{
hash[from][to]=cost;
}
}
Dis[Start]=0;
long j,k;
for (i=1;i<m;++i)
{
bool doit=false;
for (j=0;j<m;++j)
{
for (k=0;k<m;++k)
{
if (hash[j][k]!=lmax&&Dis[j]<lmax&&Dis[j]+hash[j][k]<Dis[k])
{
Dis[k]=Dis[j]+hash[j][k];
doit=true;
}
}
}
if (!doit)
{
break;
}
}
bool Y=true;
for (j=0;j<m;++j)
{
for (k=0;k<m;++k)
{
if (Dis[j]<lmax&&Dis[j]+hash[j][k]<Dis[k])
{
Y=false;
goto l1;
}
}
}
l1:
if (Dis[End]==lmax||!Y)
{
printf("infinity\n");
}
else
{
printf("%I64d\n",Dis[End]);
}
}
return 0;
}
using namespace std;
__int64 lmax=0x7FFFFFFF;
const long MAXN=1200;
__int64 hash[MAXN][MAXN];
__int64 Dis[MAXN];
long Start,End;
long m,n;//点,边
int main()
{
lmax=lmax<<10;
long T;
scanf("%ld",&T);
while (T--)
{
scanf("%ld",&m);
scanf("%ld %ld",&Start,&End);
scanf("%ld",&n);
long i,ii;
for (i=0;i<MAXN;++i)
{
Dis[i]=lmax;
for (ii=0;ii<MAXN;++ii)
{
hash[i][ii]=lmax;
}
}
for (i=0;i<n;++i)
{
long from,to;
__int64 cost;
scanf("%ld %ld %I64d",&from,&to,&cost);
if (cost<hash[from][to])
{
hash[from][to]=cost;
}
}
Dis[Start]=0;
long j,k;
for (i=1;i<m;++i)
{
bool doit=false;
for (j=0;j<m;++j)
{
for (k=0;k<m;++k)
{
if (hash[j][k]!=lmax&&Dis[j]<lmax&&Dis[j]+hash[j][k]<Dis[k])
{
Dis[k]=Dis[j]+hash[j][k];
doit=true;
}
}
}
if (!doit)
{
break;
}
}
bool Y=true;
for (j=0;j<m;++j)
{
for (k=0;k<m;++k)
{
if (Dis[j]<lmax&&Dis[j]+hash[j][k]<Dis[k])
{
Y=false;
goto l1;
}
}
}
l1:
if (Dis[End]==lmax||!Y)
{
printf("infinity\n");
}
else
{
printf("%I64d\n",Dis[End]);
}
}
return 0;
}