BFS跑一下就好了,判断下是否只有一个环。
需要注意的是,还需判断是否有孤立点的存在。
#include<bits/stdc++.h>
using namespace std;
void read(long long &a){
char ch;while(!((ch=getchar())>='0')&&(ch<='9'));
a=ch-'0';while(((ch=getchar())>='0')&&(ch<='9'))a*=10,a+=ch-'0';
}
const int MAXN=110;
vector<int> eg[MAXN];
int from[MAXN],vis[MAXN];
int main()
{
int n,m,x,y,i,flag;
while(~scanf("%d%d",&n,&m))
{
for(i=1;i<=n;i++)
eg[i].clear();
while(m--)
{
scanf("%d%d",&x,&y);
eg[x].push_back(y);
eg[y].push_back(x);
}
flag=0;
queue<int> q;
memset(from,-1,sizeof(from));
memset(vis,0,sizeof(vis));
q.push(1);
vis[1]++;
while(!q.empty())
{
x=q.front();
q.pop();
for(i=0;i<eg[x].size();i++)
{
if(eg[x][i]==from[x])
continue;
if(from[eg[x][i]]!=-1)
flag++;
else
from[eg[x][i]]=x;
if(!vis[eg[x][i]])
{
vis[eg[x][i]]++;
q.push(eg[x][i]);
}
}
}
for(i=1;i<=n;i++)
{
if(!vis[i])
flag=0;
}
if(flag==2)
printf("FHTAGN!\n");
else
printf("NO\n");
}
}