很明显的弗洛伊德,先找一下所有的两点之间是否为通路然后暴力枚举即可
#include<iostream>
using namespace std;
const int N=110;
bool g[N][N];
int n;
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++)
{
int a,b;
cin>>a>>b;
g[a][b]=true;
}
for(int i=1;i<=n;i++)g[i][i]=true;
for(int k=1;k<=n;k++)
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
g[i][j]|=g[i][k]&&g[k][j];
for(int i=1;i<=n;i++)
{
bool falg=true;
for(int j=1;j<=n;j++)
{
if(!g[j][i])
{
falg=false;
break;
}
}
if(falg)
{
cout<<i;
return 0;
}
}
cout<<-1;
return 0;
}