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;
    }
    
  • 相关阅读:
    三毛
    深复制和浅复制
    并发和并行
    PhotoKit保存图片到相册
    利用代码块
    Maven打包程序
    通过Nginx+Tomcat简单实现发布时不间断服务的提供
    C# java MD5加密方不一致问题
    SpringBoot读取配置值的方式
    Java8之集合排序
  • 原文地址:https://www.cnblogs.com/AlexPanda/p/12520295.html
Copyright © 2011-2022 走看看