POJ3275 FLOYD邻接表 [模板]
#include<stdio.h>
const int N=1005;
int n,m;
bool mat[N][N];
int prec[N][N],succ[N][N];
void floyd()
{
for(int k=1;k<=n;k++)
{
for(int i=1;i<=prec[k][0];i++)
{
int a=prec[k][i];
for(int j=1;j<=succ[k][0];j++)
{
int b=succ[k][j];
if(!mat[a][b])
{
mat[a][b]=true;
prec[b][++prec[b][0]]=a;
succ[a][++succ[a][0]]=b;
}
}
}
}
}
int main()
{
scanf("%d%d",&n,&m);
int a,b;
for(int i=1;i<=m;i++)
{
scanf("%d%d",&a,&b);
mat[a][b]=true;
prec[b][++prec[b][0]]=a;
succ[a][++succ[a][0]]=b;
}
floyd();
int ans=0;
for(int i=1;i<=n;i++)
for(int j=i+1;j<=n;j++)
if(mat[i][j]||mat[j][i])
ans++;
printf("%d\n",n*(n-1)/2-ans);
return 0;
}
const int N=1005;
int n,m;
bool mat[N][N];
int prec[N][N],succ[N][N];
void floyd()
{
for(int k=1;k<=n;k++)
{
for(int i=1;i<=prec[k][0];i++)
{
int a=prec[k][i];
for(int j=1;j<=succ[k][0];j++)
{
int b=succ[k][j];
if(!mat[a][b])
{
mat[a][b]=true;
prec[b][++prec[b][0]]=a;
succ[a][++succ[a][0]]=b;
}
}
}
}
}
int main()
{
scanf("%d%d",&n,&m);
int a,b;
for(int i=1;i<=m;i++)
{
scanf("%d%d",&a,&b);
mat[a][b]=true;
prec[b][++prec[b][0]]=a;
succ[a][++succ[a][0]]=b;
}
floyd();
int ans=0;
for(int i=1;i<=n;i++)
for(int j=i+1;j<=n;j++)
if(mat[i][j]||mat[j][i])
ans++;
printf("%d\n",n*(n-1)/2-ans);
return 0;
}
浙公网安备 33010602011771号