1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | #include <stdio.h> #include <algorithm> #include <vector> using namespace std; vector<vector<int> > dp; vector<vector<int> > adj; int INF = 1000000000; int main() { int com, net; scanf("%d %d", &com, &net); adj.assign(com+1, vector<int>(com+1, 0)); dp.assign(com + 1, vector<int>(com + 1, INF)); while (net--) { int a, b; scanf("%d %d", &a, &b); adj[a][b] = 1; adj[b][a] = 1; dp[a][b] = 1; dp[b][a] = 1; } for (int i = 1; i <= com; i++) { dp[i][i] = 0; } for (int k = 1; k <= com; k++) { for (int i = 1; i <= com; i++) { for (int j = 1; j <= com; j++) { dp[i][j] = min(dp[i][j], dp[i][k] + dp[k][j]); } } } int rst = 0; for (int i = 1; i <= com; i++) { if (dp[1][i] != 0 && dp[1][i] != INF) rst++; } printf("%d", rst); } | cs |
'알고리즘 > 플로이드 워셜' 카테고리의 다른 글
플로이드-워셜 최단거리 (더블릿) (0) | 2019.05.16 |
---|---|
1965 상자넣기 (오답, LIS 접근 필요) (0) | 2019.05.09 |
2660 회장뽑기 (0) | 2019.05.09 |