zoukankan      html  css  js  c++  java
  • hdu 5154 Harry and Magical Computer

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5154

    题意分析:有向图问题,要求判断是否存在环。 发现并查集竟然也能处理有向图问题~~

    /*Harry and Magical Computer
    
    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
    Total Submission(s): 1028    Accepted Submission(s): 415
    
    
    Problem Description
    In reward of being yearly outstanding magic student, Harry gets a magical computer. When the computer begins to deal with a process, it will work until the ending of the processes. One day the computer got n processes to deal with. We number the processes from 1 to n. However there are some dependencies between some processes. When there exists a dependencies (a, b), it means process b must be finished before process a. By knowing all the m dependencies, Harry wants to know if the computer can finish all the n processes.
     
    
    Input
    There are several test cases, you should process to the end of file.
    For each test case, there are two numbers n m on the first line, indicates the number processes and the number of dependencies. 1≤n≤100,1≤m≤10000
    The next following m lines, each line contains two numbers a b, indicates a dependencies (a, b). 1≤a,b≤n
     
    
    Output
    Output one line for each test case. 
    If the computer can finish all the process print "YES" (Without quotes).
    Else print "NO" (Without quotes).
     
    
    Sample Input
    3 2
    3 1
    2 1
    3 3
    3 2
    2 1
    1 3
     
    
    Sample Output
    YES
    NO
     
    
    Source
    BestCoder Round #25
     
    */
    #include <cstdio>
    #include <cstring>
    const int maxn = 1000 + 10;
    int n, m, p[maxn];
    int find(int x, int y)
    {
        if(p[y] == x) return 1;
        if(p[y] == y) return 0;
        find(x, p[y]);
    }
    
    int main()
    {
        int a, b;
        while(~scanf("%d%d", &n, &m)){
            int flag = 0;
            for(int i = 1; i <= n; i++) p[i] = i;
            for(int i = 0; i < m; i++){
                scanf("%d%d", &a, &b);
                if(find(a, b)) flag = 1;
                else p[a] = b;
            } 
            if(!flag) printf("YES
    ");
            else printf("NO
    "); 
        }
        return 0;
    }
  • 相关阅读:
    Spring 控制反转容器(Inversion of Control – IOC)
    理解依赖注入(DI
    创建一个简单的Spring应用
    Spring开发环境搭建(Eclipse)
    Spring框架模块
    Spring 框架介绍
    spring教程
    Bulma CSS
    Bulma CSS
    Bulma CSS
  • 原文地址:https://www.cnblogs.com/ACFLOOD/p/4310416.html
Copyright © 2011-2022 走看看