https://www.acmicpc.net/problem/10159
c++ 플로이드-와샬 풀이
a->b , b->c 이면 a->c이다
플로이드 와샬 = 3중 for문( 중간점, 시작점, 끝점 순서 )
#include <iostream>
#include <string>
using namespace std;
int N,M;
int p[101][101];
int main() {
cin>>N>>M;
for(int i=0;i<M;i++)
{
int a,b;
cin>> a>>b;
p[a][b]=1;
}
for(int j=1;j<=N;j++){
for(int i=1;i<=N;i++){
for(int k=1;k<=N;k++){
if(p[i][j]==1&&p[j][k]==1) p[i][k]=1;
}
}
}
for(int i=1;i<=N;i++){
int cnt =0;
for(int j=1;j<=N;j++){
if(j==i) continue;
if(p[i][j]==0 && p[j][i]==0) cnt++;
}
cout<<cnt<<"\n";
}
}