(File IO): input:factory.in output:factory.out
时间限制: 1000 ms 空间限制: 262144 KB 具体限制
Goto ProblemSet
题目描述
牛奶生意正红红火火!
F
a
r
m
e
r
J
o
h
n
Farmer John
FarmerJohn的牛奶加工厂内有
N
N
N个加工站,编号为
1
…
N
(
1
≤
N
≤
100
1…N(1≤N≤100
1…N(1≤N≤100,以及
N
−
1
N−1
N−1条通道,每条连接某两个加工站。(通道建设很昂贵,所以
F
a
r
m
e
r
J
o
h
n
Farmer John
FarmerJohn选择使用了最小数量的通道,使得从每个加工站出发都可以到达所有其他加工站)。
为了创新和提升效率,
F
a
r
m
e
r
J
o
h
n
Farmer John
FarmerJohn在每条通道上安装了传送带。不幸的是,当他意识到传送带是单向的已经太晚了,现在每条通道只能沿着一个方向通行了!所以现在的情况不再是从每个加工站出发都能够到达其他加工站了。
然而,
F
a
r
m
e
r
J
o
h
n
Farmer John
FarmerJohn认为事情可能还不算完全失败,只要至少还存在一个加工站
i
i
i满足从其他每个加工站出发都可以到达加工站
i
i
i。注意从其他任意一个加工站
j
j
j前往加工站i可能会经过
i
i
i和
j
j
j之间的一些中间站点。请帮助
F
a
r
m
e
r
J
o
h
n
Farmer John
FarmerJohn求出是否存在这样的加工站i。
输入
输入的第一行包含一个整数
N
N
N,为加工站的数量。以下
N
−
1
N−1
N−1行每行包含两个空格分隔的整数
a
i
ai
ai和
b
i
bi
bi,满足
1
≤
a
i
,
b
i
≤
N
1≤ai,bi≤N
1≤ai,bi≤N以及
a
i
≠
b
i
ai≠bi
ai=bi。这表示有一条从加工站
a
i
ai
ai向加工站
b
i
bi
bi移动的传送带,仅允许沿从
a
i
ai
ai到
b
i
bi
bi的方向移动。
输出
如果存在加工站
i
i
i满足可以从任意其他加工站出发都可以到达加工站
i
i
i,输出最小的满足条件的
i
i
i。否则,输出
−
1
−1
−1。
样例输入
3
1 2
3 2
样例输出
2
数据范围限制
解题思路
如果一个点是一条传送带的起始点(做过
a
i
ai
ai),那他连得点就不能时驶向他,就不复合题意。
所以,
我们就是要找的一个不是传送带起始点(没做过
a
i
ai
ai)的点,
当然,若点中有
>
1
>1
>1个点没做过
a
i
ai
ai输出
−
1
-1
−1。
代码
#include<iostream>
#include<cstring>
#include<string>
#include<cstdio>
#include<algorithm>
#include<iomanip>
#include<cmath>
using namespace std;
int n,a,b,x[110],y[110],ans;
int main(){
freopen("factory.in","r",stdin);
freopen("factory.out","w",stdout);
scanf("%d",&n);
for(int i=1;i<=n-1;i++)
{
scanf("%d%d",&a,&b);
x[a]++;
y[b]++;
}
ans=-1;
for(int i=1;i<=n;i++)
{
if(x[i]==0&&ans!=-1) {ans=-1;break;}
if(x[i]==0) ans=i;
}
printf("%d",ans);
}