博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ZOJ3811 Untrusted Patrol
阅读量:4709 次
发布时间:2019-06-10

本文共 2282 字,大约阅读时间需要 7 分钟。

题意:给你一个可能不联通的图,其中有k个点有计时器,计时器只能记录第一次到的时间,最后有L个计时器返回时间。

解题思路:深搜,按顺序找,每次找到不是site + 1 的电且有计时器的点就结束并把这个点加入我们的搜索池里面,每次搜完以后再看site + 1 是不是在池子里面,如果使得额话又从这个点开始搜索

解题代码:

1 // File Name: c.cpp  2 // Author: darkdream  3 // Created Time: 2014年09月07日 星期日 13时56分37秒  4   5 #include
6 #include
7 #include
8 #include
9 #include
10 #include
11 #include
12 #include
13 #include
14 #include
15 #include
16 #include
17 #include
18 #include
19 #include
20 #include
21 #include
22 #include
23 #include
24 #define LL long long 25 #define maxn 100005 26 using namespace std; 27 28 int n , m , kn ,ln; 29 vector
mp[maxn]; 30 int visit[maxn]; 31 int k[maxn]; 32 int l[maxn]; 33 int hs[maxn]; 34 int ok ; 35 int site; 36 int sum ; 37 void dfs(int s ) 38 { 39 int num = mp[s].size(); 40 for(int i = 0;i < num;i ++) 41 { 42 if(!visit[mp[s][i]]) 43 { 44 if(!k[mp[s][i]]){ 45 visit[mp[s][i]] = 1; 46 sum ++ ; 47 dfs(mp[s][i]); 48 } 49 else{ 50 if(l[mp[s][i]] == site + 1 ) 51 { 52 visit[mp[s][i]] = 1; 53 site ++ ; 54 sum ++ ; 55 dfs(mp[s][i]); 56 }else if(l[mp[s][i]]){ 57 hs[l[mp[s][i]]] = mp[s][i]; 58 } 59 } 60 } 61 } 62 if(site == ln) 63 { 64 ok = 1; 65 return ; 66 }else{ 67 if(hs[site + 1]) 68 { 69 visit[hs[site+1]] = 1; 70 site ++ ; 71 sum ++ ; 72 dfs(hs[site]); 73 } 74 } 75 } 76 int main(){ 77 int t; 78 scanf("%d",&t); 79 while(t--) 80 { 81 scanf("%d %d %d",&n,&m,&kn); 82 int a, b ; 83 for(int i = 1;i <= n;i ++) 84 mp[i].clear(); 85 memset(hs,0,sizeof(hs)); 86 memset(k,0,sizeof(k)); 87 memset(l,0,sizeof(l)); 88 memset(visit,0,sizeof(visit)); 89 int temp ; 90 for(int i = 1;i <= kn ;i ++ ) 91 { 92 scanf("%d",&temp); 93 k[temp] = 1 ; 94 } 95 for(int i = 1 ;i <= m;i ++) 96 { 97 scanf("%d %d",&a,&b); 98 mp[a].push_back(b); 99 mp[b].push_back(a);100 }101 int be;102 scanf("%d",&ln);103 for(int i = 1;i <= ln ;i ++)104 {105 scanf("%d",&temp);106 if(i == 1 )107 be = temp; 108 l[temp] = i;109 }110 if(ln < kn)111 {112 printf("No\n");113 continue;114 }115 ok = 0 ; 116 site = 1; 117 sum = 1 ; 118 visit[be] = 1;119 dfs(be); 120 121 if(ok && sum == n)122 printf("Yes\n");123 else printf("No\n");124 }125 return 0;126 }
View Code

 

转载于:https://www.cnblogs.com/zyue/p/3961448.html

你可能感兴趣的文章
给所有的Control加两个属性,实现回车键自动跳转到下一个控件
查看>>
使用正则表达式,取得点击次数,函数抽离
查看>>
数据库设计——评论回复功能
查看>>
Dll 使用 PChar 参数的小例子 - 回复 "linximf" 的问题
查看>>
跟我一起学kafka(一)
查看>>
Sql统计一个字符串在另一个字符串出现的次数的函数-fnQueryCharCountFromString
查看>>
电脑技巧 ADSL如何远程盗号
查看>>
源码编译安装php
查看>>
切换用户,显示用户名, 调用Windows系统命令
查看>>
修改dede标题长度限制&nbsp;改此参数后…
查看>>
ubuntu下安装Docker
查看>>
mysql的字符编码
查看>>
《编程之美》读书笔记 -- 1.4买书问题
查看>>
稳定排序
查看>>
libev & libevent简介
查看>>
ProtoBuffer优势
查看>>
@Repository、@Service、@Controller 和 @Component
查看>>
bootstrap-wysihtml5设置值
查看>>
Windows常用快捷键与常用命令
查看>>
290. Word Pattern 单词匹配模式
查看>>