zoukankan      html  css  js  c++  java
  • [CF1303C] Perfect Keyboard

    Solution

    根据原字符串建图,每个字符是一个点,相邻则连边

    然后从每一个度数为 (1) 的点开始爆搜连通块,合法情况下应该是一条链

    
    #include <bits/stdc++.h>
    using namespace std;
    
    #define int long long
    
    int g[33][33],d[33],vis[33],fg=1;
    vector <int> sta;
    
    void dfs(int p) {
        if(vis[p]) return;
        vis[p]=1;
        sta.push_back(p);
        int flag=1;
        for(int i=0;i<26;i++) {
            if(vis[i]==0 && g[p][i]) {
                if(flag) {
                    flag=0;
                    dfs(i);
                }
                else {
                    fg=0;
                }
            }
        }
    }
    
    void solve(string str) {
        sta.clear();
        fg=1;
        memset(g,0,sizeof g);
        for(int i=1;i<str.size();i++) {
            g[str[i]-'a'][str[i-1]-'a']=1;
            g[str[i-1]-'a'][str[i]-'a']=1;
        }
        memset(d,0,sizeof d);
        for(int i=0;i<26;i++) {
            for(int j=0;j<26;j++) d[i]+=g[i][j];
        }
        memset(vis,0,sizeof vis);
        for(int i=0;i<26;i++) {
            if(d[i]<=1 && vis[i]==0) {
                dfs(i);
            }
        }
        if(sta.size()!=26) fg=0;
        for(int i=0;i<26;i++) if(d[i]>2) fg=0;
        if(fg) {
            puts("YES");
            for(int i=0;i<26;i++) cout<<(char)(sta[i]+'a');
            cout<<endl;
        }
        else {
            puts("NO");
        }
    }
    
    signed main() {
        int t;
        cin>>t;
        while(t--) {
            string str;
            cin>>str;
            solve(str);
        }
    }
    
  • 相关阅读:
    Struts2完全解耦和
    storm 错误汇总
    sublime3 在ubuntu下不能输入中文
    sublime3 10款必备插件
    sublime3 SublimeREPL python3
    sublime3 Package Control不能使用
    Buffer ByteBuffer 缓冲区
    redis cluster批量插入
    延期执行的方案计策略汇总
    linux 免密登录
  • 原文地址:https://www.cnblogs.com/mollnn/p/12345834.html
Copyright © 2011-2022 走看看