大家好,我又双叒叕地来问问题了,为啥我本地ACluoguCE,麻烦各位大佬看一下,谢谢!
#include<bits/stdc++.h>
#define N 1009
using namespace std;
typedef long long ll;
ll n,cnt,y=0;
bool vis[N];
string s[N],ans[N];
vector<ll> to[N],b[N];
void print(){
for(ll i=1;i<cnt;++i) cout<<ans[i]<<".";
cout<<ans[cnt];
}
bool dfs(ll x,ll fa,ll sum){
ans[++cnt]=s[x],vis[x]=1;
// cout<<x<<" "<<cnt<<" "<<sum<<" "<<s[x]<<endl;
if(sum==n){print();exit(0);}
bool ok=0;
for(ll i=0,v;i<to[x].size();++i)
if((v=to[x][i])!=fa&&!vis[v]){
ok=1;dfs(v,x,sum+1);
}
vis[x]=0;
--cnt;
if(!ok) return 0;
}
int main(){
ios::sync_with_stdio(false);
cin>>n;
for(ll i=1;i<=n;++i) cin>>s[i];
sort(s+1,s+n+1);
for(ll i=1;i<=n;++i)
for(ll j=1;j<=n;++j)
if(j!=i&&s[i][s[i].size()-1]==s[j][0]){to[i].push_back(j);b[j].push_back(i);}
for(ll i=1;i<=n;++i) y+=abs(b[i].size()-to[i].size());
if(y>2){cout<<"***";return 0;}
for(ll i=1;i<=n;++i){
cnt=0;
fill(vis,vis+N,0);
dfs(i,0,1);
}
cout<<"***";
return 0;
}