链接:http://acm.fzu.edu.cn/problem.php?pid=2181
思路:乍一看以为是并查集,仔细想了下又找不到让函数结束的条件,所以就看了其他人的搜索大法
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <queue>
#include <algorithm>
typedef long long ll;
using namespace std; int map[][],vis[],p[],flag;
int cas,n,m,k,a,b; void dfs(int s,int cur,int *p)
{
if(flag)
return;
if(cur>=k && map[p[]][p[cur-]])
{
flag=;
return;
}
for(int i=;i<=n;i++)
{
if(map[s][i] && !vis[i])
{
vis[i]=;
p[cur]=i;
dfs(i,cur+,p);
vis[i]=;
}
}
} int main()
{ scanf("%d",&cas);
while(cas--)
{
flag=;
memset(vis,,sizeof(vis));
memset(map,,sizeof(map));
scanf("%d %d %d",&n,&m,&k);
for(int i=;i<m;i++)
{
scanf("%d %d",&a,&b);
map[a][b]=map[b][a]=;
}
if(k>n)
{
printf("What a Pity.\n");
continue;
} for(int i=;i<n;i++)
if(!flag)
dfs(i,,p);
if(flag)
printf("Let's Fire!\n");
else
printf("What a Pity.\n");
}
return ;
}