#include <iostream>
#include <string.h>
using namespace std;
int dis[30];
int vis[30];
int par[30][30];
int deg[30];
int ans;
int start,e;
void dj()
{
memset(dis,0,sizeof(dis));
memset(vis,0,sizeof(vis));
for(int i=1;i<=26;i++)
dis[i]=par[start][i];
dis[start]=0;
vis[start]=1;
for(int i=1;i<=26;i++)
{
int tmp=100000000;
int v=-1;
for(int j=1;j<=26;j++)
if(!vis[j] && tmp>dis[j] )
{
tmp=dis[j];
v=j;
}
if(v==-1)
{
ans+=dis[e];
return ;
}
vis[v]=1;
for(int j=1;j<=26;j++)
if(!vis[j] && dis[j]>dis[v]+par[v][j] )
dis[j]=dis[v]+par[v][j];
}
}
void read(string s)
{
int len=s.size();
int x=s[0]-'a'+1;
int y=s[len-1]-'a'+1;
par[x][y]=len;
par[y][x]=len;
deg[x]++;
deg[y]++;
ans+=len;
}
int main()
{
string s;
while(cin>>s)
{
memset(deg,0,sizeof(deg));
for(int i=1;i<=26;i++)//还是用无穷大吧……不要用-1
for(int j=1;j<=26;j++)
par[i][j]=100000000;
start=0;
e=0;
int i;
ans=0;
read(s);
while(cin>>s,s!="deadend")
{
read(s);
}
for(i=1;i<=26;i++)
if(deg[i]%2)
{
start=i;
break;
}
for(i++;i<=26;i++)
if(deg[i]%2)
{
e=i;
break;
}
if(start==0 && e==0)
cout<<ans<<endl;
else
{
dj();
cout<<ans<<endl;
}
}
return 0;
}
uva117
最新推荐文章于 2021-02-22 23:24:48 发布