poj Sorting It All Out 托普排序

来源:互联网 发布:linux can总线驱动 编辑:程序博客网 时间:2024/06/06 15:51

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 6A<BA<CB<CC<DB<DA<B3 2A<BB<A26 1A<Z0 0

Sample Output

Sorted sequence determined after 4 relations: ABCD.Inconsistency found after 2 relations.Sorted sequence cannot be determined.
#include<cstdio>#include<iostream>#include<algorithm>#include<cstring>#include<queue>#include<string.h>using namespace std;struct node{    int v,next;} edge[200000];int n,m,cnt,head[20000],rudu[2000];void add(int u,int v){    edge[cnt].v=v;    edge[cnt].next=head[u];    head[u]=cnt++;}int sh[20000],k;int  topu(){    int flag1=0;    k=0;    int rd[2000];    memcpy(rd,rudu,sizeof(rudu));    queue<int>q;    for(int i=1; i<=n; i++)        if(!rd[i])        {            q.push(i);        }    while(!q.empty())    {        int t=q.front();        sh[k++]=t;        q.pop();        if(!q.empty())        {            flag1=1;        }        for(int pp=head[t]; pp!=-1; pp=edge[pp].next)        {            rd[edge[pp].v]--;            if(rd[edge[pp].v]==0)                q.push(edge[pp].v);        }    }    if(k!=n)        return 1;    else if(flag1==1)        return 2;    return 0;}int main(){    char a,b,c;    while(scanf("%d %d",&n,&m),n||m)    {        getchar();        memset(head,-1,sizeof(head));        memset(rudu,0,sizeof(rudu));        int x=0;        for(int i=1; i<=m; i++)        {            cin>>a>>b>>c;            int a1,c1;            a1=a-'A'+1;            c1=c-'A'+1;            if(x==0)            {                    add(a1,c1);                    rudu[c1]++;                int s=topu();                if(s==0)                {                    printf("Sorted sequence determined after %d relations: ",i);                    for(int j=0; j<k; j++)                        printf("%c",sh[j]+'A'-1);                    printf(".\n");                    x=1;                }                else if(s==1)                {                    printf("Inconsistency found after %d relations.\n",i);                     x=1;                }            }        }        if(!x)        {            cout<<"Sorted sequence cannot be determined."<<endl;        }    }    return 0;}


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 电脑久了很慢怎么办 影驰显卡花屏怎么办 反恐精英全球攻势加载地图慢怎么办 老滚5视角锁死了怎么办 苹果描述文件没有了怎么办 苹果6s发热严重怎么办 苹果6s发烫严重怎么办 手机型号不适配全军出击怎么办? 苹果5版本过低怎么办 在泰国买到假货怎么办 在泰国旅游遇到危险该怎么办? 拾到小米手环怎么办 苹果充电打游戏触点怎么办 衣服上金属锈了怎么办 光之子门锁住了怎么办 挖到金矿石了该怎么办 邻居是精神病扔石头怎么办 汽车保养手册丢了怎么办 五号电池没电了怎么办 电脑打印时显示脱机怎么办 博新计划两年后怎么办 门帘粘扣老是掉怎么办 魔术粘贴带双面背胶不粘了怎么办 斜挎包包磨衣服怎么办 电脑ip被别人知道了怎么办 西乐葆不止痛了怎么办 家里鸽子多捣蛋的不行怎么办 联璧倒闭了理财钱怎么办 众筹平台雷了怎么办 App理财无法提现怎么办 喝咖啡喝的心慌怎么办 睾丸被用力捏破流血怎么办 足球大师球队声望过高怎么办 fm17买了好多球员怎么办 fm2018电脑适应了战术怎么办 家纺摆放跑色怎么办 买的t恤太小了怎么办? 汽车全包围脚垫翘边怎么办 针织衣服线跑了怎么办 老板跟老板娘吵架我应该怎么办 偷看老板娘洗澡被发现怎么办?