zoukankan      html  css  js  c++  java
  • HDU 4857 逃生(反向拓扑排序+优先队列)

    ( ̄▽ ̄)"

    //这题对序号输出有要求,较小的序号优先输出,所以用到优先队列
    //优先队列是优先弹出值最大的,所以最后要反向输出结果,才是正确的output
    #include<iostream>
    #include<cstdio>
    #include<cmath>
    #include<algorithm>
    #include<cstring>
    #include<string>
    #include<cstdlib>
    #include<vector>
    #include<queue>
    using namespace std;
    typedef long long ll;
    const int MAXN=100005;
    vector<int> g[MAXN];
    int degree[MAXN],L[MAXN],n,m;
    
    void toposort()
    {
        int tot=0;
        priority_queue<int> que;  //toposort的实现类似于BFS
        for(int i=1;i<=n;i++)
            if(!degree[i])
                que.push(i);
        while(!que.empty())
        {
            int x=que.top();que.pop();
            L[tot++]=x;
            for(int j=0;j<g[x].size();j++)
            {
                int t=g[x][j];
                degree[t]--;
                if(!degree[t])
                    que.push(t);
            }
        }
       // if(tot==n) return true;
       // return false;
    }
    
    int main()
    {
        int t,a,b;
        scanf("%d",&t);
        while(t--)
        {
            scanf("%d %d",&n,&m);
            memset(degree,0,sizeof(degree));
            memset(L,0,sizeof(L));
            memset(g,0,sizeof(g));
            for(int i=0;i<m;i++)
            {
                scanf("%d %d",&a,&b);
                g[b].push_back(a);
                degree[a]++;
            }
            toposort();
            for(int i=n-1;i>=0;i--)
            {
                printf("%d",L[i]);
                if(i!=0)
                    printf(" ");
                else
                    printf("
    ");
            }
        }
    }
  • 相关阅读:
    sed 使用总结
    rgmanager 介绍
    linux nbd & qemu-nbd
    corosync基本使用
    svn 基本使用
    tornado 实践
    mysql mac启动
    postgresql
    django
    django
  • 原文地址:https://www.cnblogs.com/atmacmer/p/5196892.html
Copyright © 2011-2022 走看看