CF510c Fox And Names


简单地说,就是给出一张名字的列表,要找到一张字母表使得这张人名的列表是按字典序排列的。

这不就是今年天梯赛的原题嘛?

拓扑排序没的说

需要注意的点:可能存在前缀相等但是长度不等 判断possible或者impossible的时候这种情况非常容易忽略

再就是如果拓扑排序存在环 也就是最后仍然存在度数不为0的点

#include
using namespace std;
#define lowbit(x) x&(-x)
#define ll long long
const int maxn=105;
int n,cnt,tot;
mapmp;
maprk;
vectorQ[maxn];
queueQQ;
int du[maxn];
bool flag;
char ans[maxn];
string s[maxn];
void add(int u,int v){
	Q[u].push_back(v);
	du[v]++;
}
void calc(string,string);
int main(){
	cin>>n;
	for(int i=1;i<=n;i++)
	cin>>s[i];
	for(int i=2;i<=n;i++)
	calc(s[i-1],s[i]);
	for(int i=1;i<=cnt;i++)
	if(!du[i])QQ.push(i);
	while(!QQ.empty()){
		int u=QQ.front();
		QQ.pop();ans[++tot]=rk[u];
		for(int i=0;ib.size())flag=1;
}