百度之星热身赛-1001(dfs)

题意:作为年度优秀魔法学员的奖赏,哈利得到了一台具有魔力的计算机。这台计算机一旦开始处理某个任务,就会一直处理到这个任务结束为止(所以你可以认为它是单线程的)。有一天,这台计算机得到了n个任务要处理,分别标号1到n。这n个任务之间又有一些依赖关系,假如存在依赖关系(a, b),那么要处理a任务,必须先将b任务完成。现在哈利得到了所有的这些依赖关系,一共m个。他想知道,这台计算机能否完成所有的任务。

思路:一开始是判断该图中是否存在环,但是WA,换成拓扑排序,A了;

 1 #include <iostream>
 2 #include <cmath>
 3 #include <cstdio>
 4 #include <cstring>
 5 #include <cstdlib>
 6 #include <string>
 7 #include <sstream>
 8 #include <algorithm>
 9 #define Max 2147483647
10 #define INF 0x7fffffff
11 #define N 2010
12 #define ll long long
13 #define mem(a,b) memset(a,b,sizeof(a))
14 #define repu(i, a, b) for(int i = (a); i < (b); i++)
15 const double PI=-acos(-1.0);
16 using namespace std;
17 int vis[N];
18 int topo[N],t;
19 int n,G[N][N];
20 bool dfs(int u)
21 {
22     vis[u] = -1;
23     repu(v,1,1+n)
24     if(G[u][v])
25     {
26         if(vis[v] < 0)
27             return false;
28         else if(!vis[v] && !dfs(v))
29             return false;
30     }
31     vis[u] = 1;
32     topo[--t] = u;///记录路径
33     return true;
34 }
35
36 bool toposort()
37 {
38     t = n;
39     memset(vis,0,sizeof(vis));
40     repu(u,1,1+n)
41     if(!vis[u])
42         if(!dfs(u))
43             return false;
44     return true;
45 }
46
47 int main()
48 {
49     int m,a,b;
50     while(cin>>n)
51     {
52         cin>>m;
53         memset(G,0,sizeof(G));
54         repu(i,0,m)
55         {
56             cin>>a>>b;
57             G[a][b] = 1;
58         }
59         if(toposort())cout<<"YES\n";
60         else
61             cout<<"NO\n";
62     }
63     return 0;
64 }

拓扑排序

时间: 2024-10-30 02:42:29

百度之星热身赛-1001(dfs)的相关文章

2014百度之星资格赛 1001:Energy Conversion(水题,逻辑题)

Energy Conversion Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 4278    Accepted Submission(s): 1024 Problem Description 魔法师百小度也有遇到难题的时候-- 现在,百小度正在一个古老的石门面前,石门上有一段古老的魔法文字,读懂这种魔法文字需要耗费大量的能量和大量的

找规律 2015百度之星资格赛 1001 大搬家

题目传送门 1 /* 2 找规律:题目真心读不懂,排列组合的题目 3 */ 4 #include <cstdio> 5 #include <iostream> 6 #include <algorithm> 7 #include <cstring> 8 using namespace std; 9 10 typedef long long ll; 11 12 const int MAXN = 1e6 + 10; 13 const int INF = 0x3f3

找规律 百度之星资格赛 1001 大搬家

题目传送门 1 /* 2 找规律:题目真心读不懂,排列组合的题目 3 */ 4 #include <cstdio> 5 #include <iostream> 6 #include <algorithm> 7 #include <cstring> 8 using namespace std; 9 10 typedef long long ll; 11 12 const int MAXN = 1e6 + 10; 13 const int INF = 0x3f3

2016-5-21 letwetell Round3 (百度之星初赛,dfs序)

halfapri(- o -)Y { 1.2016百度之星Round2A 题目链接 题解链接 1001 All X 循环节 1002 Sitting in Line 状压dp 1003 Snacks 1004 D Game 1005 BD String 找规律 1006 Gym Class 贪心+topo 2.2012多校第7场 hdu4366 Successor 线段树 + dfs序 }

大搬家(百度之星资格赛1001)

大搬家 近期B厂组织了一次大搬家,所有人都要按照指示换到指定的座位上.指示的内容是坐在位置i上的人要搬到位置j上.现在B厂有N个人,一对一到N个位置上.搬家之后也是一一对应的,改变的只有位次. 在第一次搬家后,度度熊由于疏忽,又要求大家按照原指示进行了一次搬家.于是,机智的它想到:再按这个指示搬一次家不就可以恢复第一次搬家的样子了.于是,B厂史无前例的进行了连续三次搬家. 虽然我们都知道度度熊的“机智”常常令人堪忧,但是不可思议的是,这回真的应验了.第三次搬家后的结果和第一次的结果完全相同. 那

ACM学习历程—BestCoder 2015百度之星资格赛1001 大搬家(递推 &amp;&amp; 组合数学)

Problem Description 近期B厂组织了一次大搬家,所有人都要按照指示换到指定的座位上.指示的内容是坐在位置i 上的人要搬到位置j 上.现在B厂有N 个人,一对一到N 个位置上.搬家之后也是一一对应的,改变的只有位次. 在第一次搬家后,度度熊由于疏忽,又要求大家按照原指示进行了一次搬家.于是,机智的它想到:再按这个指示搬一次家不就可以恢复第一次搬家的样子了.于是,B厂史无前例的进行了连续三次搬家. 虽然我们都知道度度熊的“机智”常常令人堪忧,但是不可思议的是,这回真的应验了.第三次

2014百度之星资格赛1001

表示目前就昨晚看了这一个看起来A+B难度的题,在WA 数次之后发现了是hdu不支持%lld,果然还是经验不足啊 题目描述: Problem Description 魔法师百小度也有遇到难题的时候--  现在,百小度正在一个古老的石门面前,石门上有一段古老的魔法文字,读懂这种魔法文字需要耗费大量的能量和大量的脑力. 过了许久,百小度终于读懂魔法文字的含义:石门里面有一个石盘,魔法师需要通过魔法将这个石盘旋转X度,以使上面的刻纹与天相对应,才能打开石门. 但是,旋转石盘需要N点能量值,而为了解读密文

百度之星2014复赛 - 1001 - Find Numbers

先上题目: Find Numbers Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 26    Accepted Submission(s): 20Special Judge Problem Description 给n个非负整数,满足对于某正整数k,n=2^k-1.从中选出(n+1)/2个数,使得它们的和是(n+1)/2的倍数. I

2014年百度之星程序设计大赛 - 资格赛 1001 Energy Conversion

Energy Conversion Problem Description 魔法师百小度也有遇到难题的时候-- 现在,百小度正在一个古老的石门面前,石门上有一段古老的魔法文字,读懂这种魔法文字需要耗费大量的能量和大量的脑力. 过了许久,百小度终于读懂魔法文字的含义:石门里面有一个石盘,魔法师需要通过魔法将这个石盘旋转X度,以使上面的刻纹与天相对应,才能打开石门. 但是,旋转石盘需要N点能量值,而为了解读密文,百小度的能量值只剩M点了!破坏石门是不可能的,因为那将需要更多的能量.不过,幸运的是,作