版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_34454069/article/details/82791740
分析:
非常简单的水题
根据树的直径的性质(每个点的最远点为直径的某一端点)
1、
2、除了
,其余所有数必须出现至少2次。
3、当
为奇数时,
的出现次数必为2次,偶数则必为1次。
满足这三个条件的就是"Possible"
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define PF printf
#define SF scanf
#define MAXN 100010
using namespace std;
int a[MAXN];
int n,cnt[MAXN],minv,maxv;
int main(){
SF("%d",&n);
for(int i=1;i<=n;i++)
SF("%d",&a[i]);
minv=a[1];
maxv=a[1];
for(int i=2;i<=n;i++){
minv=min(minv,a[i]);
maxv=max(maxv,a[i]);
}
if(minv!=(maxv+1)/2){
PF("Impossible");
return 0;
}
for(int i=1;i<=n;i++)
cnt[a[i]]++;
for(int i=maxv;i>minv;i--){
if(cnt[i]<2){
PF("Impossible");
return 0;
}
}
if(maxv%2==0&&cnt[minv]!=1){
PF("Impossible");
return 0;
}
if(maxv%2==1&&cnt[minv]!=2){
PF("Impossible");
return 0;
}
PF("Possible");
}