POJ_3660_floyd
- 题意:告诉所有奶牛的关系,让你确定奶牛的排名(只有当该奶牛与其他所有奶牛的关系确定了才能确定该奶牛的排名)
- 通过floyd确定一个点是否能到另一个点.
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#include <iostream>
using namespace std;
const int maxn = 105;
int e[maxn][maxn];
int n,m;
int floyd() {
for (int k=1; k<=n; k++)
for (int i=1; i<=n; i++)
for (int j=1; j<=n; j++)
e[i][j] = e[i][j] | (e[i][k] & e[k][j]); //更新每个点与其他所有的点的关系,floyd不仅能求出2点之间的路径,还能求出是否能到
int ans = 0;
for (int i=1; i<=n; i++) {
int tmp = 1;
for (int j=1; j<=n; j++) {
if (i == j) continue;
else {
tmp = tmp & (e[i][j] | e[j][i]); // 确定该点与其他所有点之间的关系,如果能确定下来,则说明排名能够确定.
}
}
ans += tmp;
}
return ans;
}
int main() {
// freopen("a.txt","r",stdin);
cin >> n >> m;
for (int i=1; i<=m; i++) {
int u,v;
cin >> u >> v;
e[u][v] = 1;
}
printf("%d\n",floyd());
return 0;
}
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!