题解:SP17819 XYI - XYI
本题要求我们判断一棵树是怎样的类型(有 X,Y,Z 三种)。我们自然不可能让计算机建出树后直接判断,所以我们要充分利用人类智慧去找规律。
观察每个结点的度数,可以看到 X,Y 存在一个中心节点,其度数应分别为
于是可以先求每个结点的度数,然后统计各个度数的节点个数,最后根据度数判断类型即可。
#include<bits/stdc++.h>
using namespace std;
int n,m;
inline void solve()
{
int degree[505]={0};
cin>>n>>m;
for(int i=1;i<=m;i++)
{
int u,v;
cin>>u>>v;
degree[u]++;
degree[v]++; //记录节点度数
}
int p[125001]={0};
for(int i=1;i<=n;i++) p[degree[i]]++; //记录度数的节点数
if(p[4]==1&&p[3]==0&&p[2]==n-5&&p[1]==4) puts("X"); //X
else if(p[4]==0&&p[3]==1&&p[2]==n-4&&p[1]==3) puts("Y"); //Y
else if(p[4]==0&&p[3]==0&&p[2]==n-2&&p[1]==2) puts("I"); //I
else puts("NotValid"); //记得判无解
}
int main()
{
int t;
cin>>t;
for(int i=1;i<=t;i++)
{
cout<<"Case "<<i<<": ";
solve();
}
return 0;
}