专题链接:https://codeforces.com/group/5yyKg9gx7m/contest/269908/problem/F
思路
最基础的floyd用法,能通即为1,不能通即为0,用floyd处理一遍即可
#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<string>
#include<map>
#include<cstring>
#include<climits>
#include<vector>
#include<queue>
#include<stack>
#define lowbit(i) ((i)&(-(i)))
#define ll long long
using namespace std;
int N;
int m[101][101];
int main()
{
cin >> N;
for (int i = 1; i <= N-1; i++)
{
int x, y;
scanf("%d%d", &x, &y);
m[x][y] = 1;
}
for (int k = 1; k <= N; k++)
{
for (int i = 1; i <= N; i++)
{
for (int j = 1; j <= N; j++)
if (i != j && j != k && k != i&& m[i][k]==1&& m[k][j]==1)
m[i][j] = 1;
}
}
int ans=0;
for (int j = 1; j <= N; j++)
{
bool pan = 1;
for (int i = 1; i <= N; i++)
{
if (i == j)
continue;
if (m[i][j] == 0)
{
pan = 0;
break;
}
}
if (pan)
{
ans = j;
break;
}
}
if (ans)
printf("%d\n", ans);
else
printf("-1\n");
return 0;
}