C - 友達の友達 / AtCoderBeginnerContest#016
#include <algorithm> #include <iostream> using namespace std; #define INF (1<<29) int data[10][10]; void Warshall_Floyd(int n) { for (int i=0; i<n; ++i) for (int j=0; j<n; ++j) for (int k=0; k<n; ++k) data[j][k]=min(data[j][k],data[j][i]+data[i][k]); } void Solve(int n, int m) { int a, b; for (int i=0; i<n; ++i) for (int j=0; j<n; ++j) if (i == j) data[i][j]=0; else data[i][j]=INF; for (int i=0; i<m; ++i) { cin >> a >> b; data[a-1][b-1]=data[b-1][a-1]=1; } Warshall_Floyd(n); for (int i=0; i<n; ++i) { int answer=0; for (int j=0; j<n; ++j) if (data[i][j] == 2) ++answer; cout << answer << endl; } }
ワーシャルフロイド法で友達との距離感を表し、
各人の友達の友達人数を出力。
~了~