• poj 1094


    Sorting It All Out
    Time Limit: 1000MS   Memory Limit: 10000K
    Total Submissions: 26911   Accepted: 9285

    Description

    An ascending sorted sequence of distinct values is one in which some form of a less-than operator is used to order the elements from smallest to largest. For example, the sorted sequence A, B, C, D implies that A < B, B < C and C < D. in this problem, we will give you a set of relations of the form A < B and ask you to determine whether a sorted order has been specified or not.

    Input

    Input consists of multiple problem instances. Each instance starts with a line containing two positive integers n and m. the first value indicated the number of objects to sort, where 2 <= n <= 26. The objects to be sorted will be the first n characters of the uppercase alphabet. The second value m indicates the number of relations of the form A < B which will be given in this problem instance. Next will be m lines, each containing one such relation consisting of three characters: an uppercase letter, the character "<" and a second uppercase letter. No letter will be outside the range of the first n letters of the alphabet. Values of n = m = 0 indicate end of input.

    Output

    For each problem instance, output consists of one line. This line should be one of the following three: 

    Sorted sequence determined after xxx relations: yyy...y. 
    Sorted sequence cannot be determined. 
    Inconsistency found after xxx relations. 

    where xxx is the number of relations processed at the time either a sorted sequence is determined or an inconsistency is found, whichever comes first, and yyy...y is the sorted, ascending sequence. 

    Sample Input

    4 6
    A<B
    A<C
    B<C
    C<D
    B<D
    A<B
    3 2
    A<B
    B<A
    26 1
    A<Z
    0 0
    

    Sample Output

    Sorted sequence determined after 4 relations: ABCD.
    Inconsistency found after 2 relations.
    Sorted sequence cannot be determined.

    Source

    East Central North America 2001

    AC代码:

    #include<iostream>
    #include<vector>
    #include<stack>
    #include<algorithm>
    #include<cstring>
    #include<stdio.h>
    using namespace std;
    int n,m;
    int in[30],tmp_in[30];
    int f1,f2;
    int str[30];
    vector <int> G[30];
    void top_sort(){                //拓扑排序
        f1=0;             //没有环
        f2=1;             //唯一排序
        for(int i=0;i<n;i++)
            tmp_in[i]=in[i];
        stack <int> s;
        while(!s.empty())
            s.pop();
        for(int i=0;i<n;i++)
            if(tmp_in[i]==0)
                s.push(i);
        int counter=0;
        while(!s.empty()){
            if(s.size()>=2){
                f2=0;
            }
            int tmp=s.top();
            s.pop();
            str[counter++]=tmp;
            for(int i=0;i<G[tmp].size();i++){
                tmp_in[G[tmp][i]]--;
                if(!tmp_in[G[tmp][i]])
                    s.push(G[tmp][i]);
            }
        }
        if(counter<n)
            f1=1;
    }
    int main(){
        while(cin>>n>>m&&(n!=0||m!=0)){
            memset(in,0,sizeof(in));
            int i;
            for(i=0;i<n;i++)
                if(!G[i].empty())
                    G[i].clear();
    
            for(i=0;i<m;i++){
                char ch[5]; cin>>ch;
                G[ch[0]-'A'].push_back(ch[2]-'A');
                in[ch[2]-'A']++;
                top_sort();
                if(f1){
                    cout<<"Inconsistency found after "<<i+1<<" relations."<<endl;
                    for(int j=i+1;j<m;j++)    //注意这里要输入剩下的信息才干退出
                        cin>>ch;
                    break;
                }
                else if(f2){
                    cout<<"Sorted sequence determined after "<<i+1<<" relations: ";
                    for(int j=0;j<n;j++)
                        cout<<char (str[j]+'A');
                    cout<<'.'<<endl;
                    for(int j=i+1;j<m;j++)      //注意这里要输入剩下的信息才干退出
                        cin>>ch;
                    break;
                }
            }
            if(i>=m)
                cout<<"Sorted sequence cannot be determined."<<endl;
        }
        return 0;
    }
    


    版权声明:本文博客原创文章,博客,未经同意,不得转载。

  • 相关阅读:
    如何正确的学习?
    GitHub的使用
    freemarker
    Vue的前端路由
    推荐一个压缩图片好用的网站-tinyPNG
    纯CSS实现滚动彩虹色文字
    npm镜像源管理
    UI、UE和UX三者之间的区别?
    移动端rem布局的学习(基于一个网易云播放页面的思考)
    移动前端不得不了解的html5 head 头标签
  • 原文地址:https://www.cnblogs.com/hrhguanli/p/4671130.html
Copyright © 2020-2023  润新知