zoukankan      html  css  js  c++  java
  • 厦门大学 ACM 1459 拓扑排序

    链接  http://acm.xmu.edu.cn/JudgeOnline/problem.php?id=1459

    #include<iostream>
    #include<stdio.h>
    #include<cstring>
    #include<algorithm>
    #include<vector>
    using namespace std;
    
    struct date
    {
        int v,next;
    }edge[212345];
    int k,head[112345];
    vector<int>v;
    bool vis[112345],vic[112345],vit[112345],fell;
    void add_edge( int u,int v ){
        edge[k].v = v;
        edge[k].next = head[u];
        head[u] = k++;
    }
    void DFS( int u ){
        vit[u] = true;
        if( fell )return;
        for( int i = head[u]; i != -1; i = edge[i].next )
        {
            if(  vit[edge[i].v] ) { fell = true;return;}
            if( !vis[edge[i].v] ) DFS( edge[i].v );
        }
        vit[u] = false; vis[u] = true;
        v.push_back( u );
    }
    int main( )
    {
        int N,M,U,V;
        while( scanf("%d%d",&N,&M) != EOF )
        {
            k = 0;
            memset( head,-1,sizeof(head) );
            memset(   vic,0,sizeof(vic) );
            for( int i = 1; i <= M; i++ )
            {
                scanf("%d%d",&U,&V);
                add_edge( U,V );
                vic[V] = true;
            }
            v.clear(); fell = false;
            memset( vis,0,sizeof(vis) );
            memset( vit,0,sizeof(vit) );
            for( int i = 1; i <= N; i++ )
               if( !vic[i] && !fell ) DFS( i );
            if( fell ){ printf("-1\n"); continue; }
            int len = v.size(); len--;
              printf("%d",v[len]);len--;
            for( int i = len; i >= 0; i-- )
              printf(" %d",v[i]);
            puts("");
        }
        return 0;
    }
    

      

  • 相关阅读:
    二叉树
    bfs
    E-Gold Coins
    D-We Love MOE Girls
    A
    哈希--查找出现过的数字
    二分查找
    KMP简单应用
    KMP算法(2)
    [JSOI2008]最大数
  • 原文地址:https://www.cnblogs.com/wulangzhou/p/3079545.html
Copyright © 2011-2022 走看看