FOJ 2181 快来买肉松饼
链接:http://acm.fzu.edu.cn/problem.php?pid=2181
思路:乍一看以为是并查集,仔细想了下又找不到让函数结束的条件,所以就看了其他人的搜索大法
1 #include <iostream> 2 #include <stdio.h> 3 #include <stdlib.h> 4 #include <string.h> 5 #include <math.h> 6 #include <queue> 7 #include <algorithm> 8 typedef long long ll; 9 using namespace std; 10 11 int map[2005][2005],vis[2005],p[2005],flag; 12 int cas,n,m,k,a,b; 13 14 void dfs(int s,int cur,int *p) 15 { 16 if(flag) 17 return; 18 if(cur>=k && map[p[0]][p[cur-1]]) 19 { 20 flag=1; 21 return; 22 } 23 for(int i=1;i<=n;i++) 24 { 25 if(map[s][i] && !vis[i]) 26 { 27 vis[i]=1; 28 p[cur]=i; 29 dfs(i,cur+1,p); 30 vis[i]=0; 31 } 32 } 33 } 34 35 36 int main() 37 { 38 39 scanf("%d",&cas); 40 while(cas--) 41 { 42 flag=0; 43 memset(vis,0,sizeof(vis)); 44 memset(map,1,sizeof(map)); 45 scanf("%d %d %d",&n,&m,&k); 46 for(int i=0;i<m;i++) 47 { 48 scanf("%d %d",&a,&b); 49 map[a][b]=map[b][a]=0; 50 } 51 if(k>n) 52 { 53 printf("What a Pity.\n"); 54 continue; 55 } 56 57 for(int i=1;i<n;i++) 58 if(!flag) 59 dfs(i,0,p); 60 if(flag) 61 printf("Let's Fire!\n"); 62 else 63 printf("What a Pity.\n"); 64 } 65 return 0; 66 }