题目意思就是找包含所有字符串的最小字符串,用拓扑就好(注意simple test不一定和你的拓扑输出相同!)。


题目:http://codeforces.com/problemset/problem/638/B


代码:

Memory: 16 KB
Time: 15 MS
Language: GNU G++ 5.1.0
Result: Accepted

代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>
using namespace std;
#define MAX 1000
#define MIN 100
vector <int> dna[26];
int flag[26], n, len;
char ans[MAX], str[MIN];
void dfs(int x){
    flag[x]=3;
    for(int i=0;i<dna[x].size();i++){
        if(flag[dna[x][i]]!=3)dfs(dna[x][i]);
    }
    ans[len++]='a'+x;
}
int main()
{
    while(cin>>n){
        len=0;
        while(n--){
            scanf("%s", &str);
            for(int i=0; i<strlen(str)-1; i++){
                dna[str[i]-'a'].push_back(str[i+1]-'a');
                flag[str[i+1]-'a']=2;
            }
            if(flag[str[0]-'a']!=2)flag[str[0]-'a']=1;
        }
        for(int i=0;i<26;i++){
            if(flag[i]==1)dfs(i);
        }
        for(int i=len-1;i>=0;i--)cout<<ans[i];
        cout<<endl;
    }
    return 0;
}