用flyod求传递闭包时只需逻辑与,所以用bitsit来维护的话可以在n^2内完成。基本上5000左右的复杂度都没有问题。
void floyd()
{
int i,j,k;
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
if(edge[j][i]) edge[j]|=edge[i];
}
}
}
用flyod求传递闭包时只需逻辑与,所以用bitsit来维护的话可以在n^2内完成。基本上5000左右的复杂度都没有问题。
void floyd()
{
int i,j,k;
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
if(edge[j][i]) edge[j]|=edge[i];
}
}
}