zoukankan      html  css  js  c++  java
  • HDU 1269 迷宫城堡

    比赛的时候很少做图论的题目,今天开了VC一个来做,貌似是队赛的题目的,一个人挑其他队。。。不过题目相对简单啦,最后排在第4位。

    这道题是简单的建模题目,将其看成强连通分量就行了。

    第一wa竟然是没看清楚结束条件,好吧,坑了。。

    #include <stdio.h>
    #include <algorithm>
    #include <vector>
    #include <stack>
    using namespace std;
    
    const int maxn = 10001;
    int pre[maxn] , lowlink[maxn] , sccno[maxn],dfs_clock,
        scc_cnt;
    vector<int> g[maxn];
    stack<int> S;
    int n , m;
    
    inline int _min(int a,int b) { return a < b ? a : b;} 
    void dfs(int u)
    {
        pre[u] = lowlink[u] = ++dfs_clock;
        S.push(u);
        for(int i=0;i<g[u].size();i++){
            int v = g[u][i];
            if(!pre[v]) {
                dfs(v);
                lowlink[u] = _min(lowlink[u] , lowlink[v]);
            }
            else if(!sccno[v]){
                lowlink[u] = _min(lowlink[u],pre[v]);
            }
        }
        if(lowlink[u] == pre[u]){
            scc_cnt ++;
            for(;;){
                int x = S.top();
                S.pop();
                sccno[x] = scc_cnt;
                if(x == u) break;
            }
        }
    }
    void targan(int n){
        dfs_clock = scc_cnt = 0;
        memset(sccno , 0 , sizeof(sccno));
        memset(pre , 0 , sizeof(pre));
        for(int i=0;i<n;i++){
            if(!pre[i]) dfs(i);
        }
    }
    
    void prt(){
        printf("-------%d-----------------
    ",scc_cnt);
        for(int i=0;i<=n;i++)
            printf("%d %d
    ",i , sccno[i]);
        printf("-------------------------
    ");
    }
    void init(){
        for(int i=0;i<=n;i++) g[i].clear();
    }
    int main()
    {
        int a , b;
        while(scanf("%d %d",&n,&m) , n + m)
        {
            init();
            for(int i=0;i<m;i++){
                scanf("%d %d",&a,&b);
                a--,b--;
                g[a].push_back(b);
            }
            targan(n);
            //prt();
            if(scc_cnt == 1) puts("Yes");
            else puts("No");
        }
        return 0;
    }        
    View Code
  • 相关阅读:
    php pcntl 多进程学习
    php socket 学习
    linux 常用alias
    php 设置一个函数的最大运行时间
    QTableView 一列添加两个按钮
    翻译qmake文档 目录
    翻译qmake文档(四) Building Common Project Types
    算法时间复杂度
    翻译qmake文档(三) Creating Project Files
    Caliburn.Micro学习笔记目录
  • 原文地址:https://www.cnblogs.com/cton/p/3448085.html
Copyright © 2011-2022 走看看