没想到用dp,写完才发现这就是floyd求最大环。。。。。
/*
ID:jinbo wu
TASK:tour
LANG:C++
*/
#include<bits/stdc++.h>
using namespace std;
bool g[110][110];
int f[110][110];
char s1[20],s2[20];
map<string,int> ma;
int main()
{
freopen("tour.in","r",stdin);
freopen("tour.out","w",stdout);
int n,m;
cin>>n>>m;
for(int i=1;i<=n;i++)
{
cin>>s1;
ma[s1]=i;
}
for(int i=1;i<=m;i++)
{
cin>>s1>>s2;
g[ma[s1]][ma[s2]]=1;
g[ma[s2]][ma[s1]]=1;
}
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
f[i][j]=-100;
f[1][1]=1;
for(int i=1;i<n;i++)
for(int j=i+1;j<=n;j++)
for(int k=1;k<j;k++)
{
if(g[k][j]&&f[i][k]&&f[i][k]+1>f[i][j])
f[i][j]=f[j][i]=f[i][k]+1;
}
int ans=1;
for(int i=1;i<n;i++)
{
if(f[i][n]&&g[i][n])
ans=max(ans,f[i][n]);
}
cout<<ans<<endl;
}