原题![在这里插入图片描述](https://img-blog.csdnimg.cn/20200302103327511.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2p1c2VpY2U=,size_16,color_FFFFFF,t_70)
题目大意
给出n条(单向)路,找到能到其他所有点的点
题目分析
求是否连通,数据规模不大,这种题来个Floyed就完事了
代码
#include<cstdio>
int map[201][201];
int main()
{
int n,ans = -1;
bool flag;
scanf("%d",&n);
if (n == 1) ans = 1;
for (int i = 0;i < n - 1;++i)
{
int a,b;
scanf("%d%d",&a,&b);
map[a][b] = 1;
}
for (int k = 1;k <= n;++k)
for (int i = 1;i <= n;++i)
for (int j = 1;j <= n;++j)
if (map[i][k] and map[k][j]) map[i][j] = 1;
for (int i = 1;i <= n;i++)
{
flag = true;
for (int j = 1;j <= n and flag;j++)
{
if (not map[j][i] and i != j) flag = false;
}
if (flag) ans = i;
}
printf ("%d",ans);
return 0;
}