• [POJ1094] Sorting It All Out


    link

    题目大意

    给出$m$个不等式关系,问可以从第几个开始确定所有之间的大小关系。若无解请输出是无法确定还是与已知矛盾。

    试题分析

    这题是真的是坑啊,尽然放在$floyd$传到闭包上面,还用二分,是真的强啊。

    其实一下子就会知道其实这是一道拓扑排序的题,所以当我们每次输入问一条边时,我们就去拓扑判断是否会形成环,条件是否充足,与顺序,然后就记得分类讨论即可。

    #include<iostream>
    #include<cstring>
    #include<cstdio>
    #include<algorithm>
    #include<queue>
    using namespace std;
    inline int read(){
        int f=1,ans=0;char c=getchar();
        while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
        while(c>='0'&&c<='9'){ans=ans*10+c-'0';c=getchar();}
        return f*ans;
    }
    queue<int> que;
    int n,m,in[27],d[27][27],find1,k[27];
    char out[27];
    char str[1001];
    int topu(){
        while(!que.empty()) que.pop();
        for(int i=1;i<=27;i++) k[i]=in[i];
        for(int i=1;i<=n;i++){if(!in[i]) que.push(i);}
        int sx=0,num=0;
        while(!que.empty()){
            if(que.size()>1) sx=1;
            int xx=que.front();que.pop();
            out[++num]=xx+'A'-1;
            for(int i=1;i<=26;i++){
                if(d[xx][i]){
                    k[i]--;
                    if(k[i]==0) que.push(i);
                }
            }
        }
        if(num!=n) return 1;
        if(sx==1) return -1;
        return 0;
    }
    int query,step;
    int main(){
    //    freopen("7.in","r",stdin);
        while(1){
            memset(in,0,sizeof(in)),find1=0,query=0,step=0;
            memset(d,0,sizeof(d));
            n=read(),m=read();
            if(!n&&!m) return 0;
            for(int i=1;i<=m;i++){
                cin>>(str+1);
                int u=str[1]-'A'+1,v=str[3]-'A'+1;
                if(str[2]=='>') swap(u,v);
                if(find1||query) continue;
                if(d[v][u]){find1=1;printf("Inconsistency found after %d relations.",i);continue;}
                if(!d[u][v]){
                    d[u][v]=1;
                    in[v]++;
                }
                int pd=topu();
                if(pd==0){query=1;step=i;continue;}
                if(pd==1){printf("Inconsistency found after %d relations.",i);find1=1;continue;}
            }
            if(query&&find1==0){
                printf("Sorted sequence determined after %d relations: ",step);
                for(int i=1;i<=n;i++) cout<<out[i];
                printf(".");
            }
            if(find1==0&&query==0) printf("Sorted sequence cannot be determined.");
            printf("
    ");
        }
    }
    View Code
  • 相关阅读:
    Http相应代码及获取方法
    (转) SQL 命令
    vue 设置动态class
    elment-ui中 给table表格 某项加点击事件
    VUE 中封装组件
    导出 搜索出的对应条件下的 内容(地址栏中携带多多个数据)
    element ui+vue 后台管理系统的新增数据页面崩溃(处理下拉数据过多)
    VUE+百度地图 vue-baidu-map
    用javascript制作秒表(有一个小问题,复位的时候,毫秒从01开始)
    左右两列导航分开滑动(移动端中)
  • 原文地址:https://www.cnblogs.com/si-rui-yang/p/10159519.html
Copyright © 2020-2023  润新知