zoukankan      html  css  js  c++  java
  • cf 510c Fox And Names 拓扑排序

    题意: n(100)个字符串长度不超过100,按照题目给出的顺序能否重新定义一下字典序。如果可以输出这26个字母
    思路:拓扑排序
    代码:

    #include <bits/stdc++.h>
    using namespace std;
    #define ll long long
    #define forn(i,n) for(int i=0;i<n;i++)
    #define for1(i,n) for(int i=1;i<=n;i++)
    #define IO ios::sync_with_stdio(false);cin.tie(0)
    
    string s[105];
    vector<int>e[27];
    bool vis[27];
    int in[27];
    
    void tpo(){
        queue<int>q;
        vector<int>ans;
        forn(i,26) if(!in[i]) q.push(i);
        bool ok = 1;
        while(!q.empty()){
            auto u = q.front();q.pop();
            if(vis[u]) {
                ok = 0;
                break;
            }
            vis[u] = 1;
            ans.push_back(u);
            for(auto &v:e[u]){
                if(!--in[v]) q.push(v);
            }
        }
        if(!ok||ans.size()!=26){
            //cerr<<"@!#@!#@#!      "<<ok<<' '<<ans.size()<<'
    ';
            cout<<"Impossible"<<'
    ';
            return;
        }
        for(auto &x:ans) cout<<char(x+'a');
    }
    
    int main(){
        IO;
        int n;cin>>n;
        map<pair<int,int>,int>mp;
        forn(i,n) cin>>s[i];
        for1(i,n-1){
            int u = -1,v = -1;
            forn(j,s[i-1].size()){
                if(j>=s[i].size()) return cout<<"Impossible"<<'
    ',0;
                if(s[i-1][j]!=s[i][j]){
                    u = s[i-1][j]-'a',v = s[i][j]-'a';
                    break;
                }
            }
            if(u!=-1) {
                if(!mp.count({u,v})){
                    mp[{u,v}] = 1;  
                    e[u].push_back(v);
                    in[v]++;
                }
            }
        }
        tpo();
        return 0;
    }
    
  • 相关阅读:
    MVC中单选按钮的实现
    前端点击手机号码跳转到手机拨号页面
    jQuery限制文本框只能输入正整数
    Asp.Net 之 二维码生成
    MVC +Jqyery+Ajax 实现弹出层提醒
    jQuery Ajax使用实例
    ASP的调试技术解答
    模式应用场景
    redis笔记
    yii resful
  • 原文地址:https://www.cnblogs.com/AlexPanda/p/12520295.html
Copyright © 2011-2022 走看看