zoukankan      html  css  js  c++  java
  • poj3687拓扑排序

    反向建图

    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #include <climits>
    #include <string>
    #include <iostream>
    #include <map>
    #include <cstdlib>
    #include <list>
    #include <set>
    #include <queue>
    #include <stack>
    
    using namespace std;
    const int INF=0xfffffff;
    
    int main()
    {
        int n,m,Icase;
        int vis[300];
        int G[300][300];
        int in[300];
        int topo[300];
        while(cin>>Icase){
            while(Icase--){
                memset(topo,0,sizeof(topo));
                memset(G,0,sizeof(G));
                memset(vis,0,sizeof(vis));
                memset(in,0,sizeof(in));
                cin>>n>>m;
                for(int i=0;i<m;i++){
                    int a,b;
                    cin>>a>>b;
                    if(!G[a][b]){
                        in[a]++;
                        G[a][b]=1;
                    }
                }
                int flag=1;
                for(int i=n;i>=1;i--){
                    int sign;
                    bool t=false;
                    for(int j=1;j<=n;j++){
                        if(in[j]==0&&!vis[j]){
                            sign=j; t=true;
                        }
                    }
                    if(!t){
                        flag=0;break;
                    }
                  //  vis[sign]=1;
                    topo[i]=sign;
                  //  cout<<topo[i]<<endl;system("pause");
                    for(int j=1;j<=n;j++){
                        if(!vis[j]&&G[j][sign]){
                            in[j]--;
                        }
                    }
                    vis[sign]=1;
                }
    
                if(!flag)cout<<-1<<endl;
                else{
                    int a[300];
                    for(int i=1;i<=n;i++){
                        a[topo[i]]=i;
                    }
                    for(int i=1;i<=n;i++){
                        if(i==1) cout<<a[i];
                        else cout<<" "<<a[i];
                    }
                    cout<<endl;
                }
            }
        }
        return 0;
    }
    

      

  • 相关阅读:
    jQuery源码 support
    jQuery 源码: 延迟对象补充。
    web FG interview all
    Img load
    浅谈js中this指向问题
    浅谈ES6原生Promise
    BootStrap的两种模态框方式
    让div盒子相对父盒子垂直居中的几种方法
    normalize与reset
    JS实现继承的方式
  • 原文地址:https://www.cnblogs.com/yigexigua/p/3845108.html
Copyright © 2011-2022 走看看