• 百度之星热身赛-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
    ";
    60         else
    61             cout<<"NO
    ";
    62     }
    63     return 0;
    64 }
    拓扑排序
  • 相关阅读:
    每日站立会议02
    每日站立会议01
    构建之法阅读笔记02
    学习进度条06
    js获取当前时间戳
    带三角凸的框
    js或者jq的tab切换
    处理浏览器兼容 各个浏览器的标识 hack
    规定CSS的属性仅在IE下生效 在非IE浏览器下不生效
    滚动到某个点 返回顶部字样出来 点击返回顶部
  • 原文地址:https://www.cnblogs.com/ACMERY/p/4521575.html
Copyright © 2020-2023  润新知