分析:
非常简单的水题
根据树的直径的性质(每个点的最远点为直径的某一端点)
1、min{ai}=⌊max{ai}+12⌋min\{a_i\}=\lfloor \frac {max\{a_i\}+1} {2}\rfloormin{ai}=⌊2max{ai}+1⌋
2、除了min{ai}min\{a_i\}min{ai},其余所有数必须出现至少2次。
3、当max{ai}max\{a_i\}max{ai}为奇数时,min{ai}min\{a_i\}min{ai}的出现次数必为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");
}