欧拉路径模板题45分求助
  • 板块P1127 词链
  • 楼主bsTiat
  • 当前回复2
  • 已保存回复2
  • 发布时间2021/10/20 19:37
  • 上次更新2023/11/4 03:08:35
查看原帖
欧拉路径模板题45分求助
211086
bsTiat楼主2021/10/20 19:37

题目 记录详情 剩下点全WA了

#include<bits/stdc++.h>
# define reg register
# define N (1005)
using namespace std;
inline int read(){
	reg char c=getchar();reg int sum=0,f=1;
	while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
	while(c<='9'&&c>='0'){sum=(sum<<3)+(sum<<1)+(c^48);c=getchar();}
	return sum*f;
}
struct node{
	string s;
	int st,ed;
	bool operator<(const node &x)const{
		return s<x.s;
	}
}x;
int cnt_in,cnt_out,v[N];
int n,len[N],in[N],out[N],s=0x7fffffff;
vector<string>pth;
vector<node>g[N];
void print(){
	int i,j;
	for(i=0;i<26;++i){
		if(g[i].empty())continue;
		printf("%c:",i+'a');
		for(j=0;j<g[i].size();++j){
			cout<<(char)(g[i][j].st+'a')<<" "<<g[i][j].s
			<<" "<<(char)(g[i][j].ed+'a')<<" ";
		}
		printf("\n");
	}
}
void dfs(int p){
	for(reg int i=v[p];i<g[p].size();i=v[p]){
		v[p]=i+1;
		pth.push_back(g[p][i].s);
		dfs(g[p][i].ed);
	}
}
int main(){
	int i,j,k,u,v,flg=1;
	n=read();
	for(i=1;i<=n;++i){
		cin>>x.s;
		x.st=x.s[0]-'a';
		s=min(x.st,s);
		x.ed=x.s[x.s.size()-1]-'a';
		g[x.st].push_back(x);
		++in[x.ed];++out[x.st];
	}
	for(i=0;i<26;++i){
		if(in[i]!=out[i])flg=0;
		if(in[i]-out[i]==1)
			++cnt_in;
		if(out[i]-in[i]==1)
			++cnt_out,s=i;
			
	}
	if(!flg&&!(cnt_in==cnt_out&&cnt_in==1)){
		printf("***");
		return 0;
	}
//	cout<<s;
	for(i=0;i<26;++i)
		sort(g[i].begin(),g[i].end());
//	print();cout<<endl;
	
	dfs(s);
	if(pth.size()!=n){
		printf("***");
		return 0;
	}
	for(i=0;i<pth.size()-1;++i)
		cout<<pth[i]<<".";
	if(pth.size()-1>=0)cout<<pth[pth.size()-1];
	return 0;
}
2021/10/20 19:37
加载中...