记录编号 202646 评测结果 AAAAAAAAAAA
题目名称 [IOI 1993][USACO]周游加拿大 最终得分 100
用户昵称 Gravatarforever 是否通过 通过
代码语言 C++ 运行时间 0.005 s
提交时间 2015-11-01 17:40:55 内存使用 0.39 MiB
显示代码纯文本
#include<cstdio>
#include<map>
#include<iostream>
#include<cstring>
#include<string>
#define Max(a,b) ((a)>(b)?(a):(b))
using namespace std;
map<string,int>ma;
int c[102][102];
int n,m,f[102][102];
string s1,s2,s;
int main(){
    freopen("tourus.in","r",stdin);
	freopen("tourus.out","w",stdout);
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;++i) cin>>s,ma[s]=i;
	for(int i=1;i<=m;++i){
		cin>>s1>>s2;
		c[ma[s1]][ma[s2]]=c[ma[s2]][ma[s1]]=1;
	}
	memset(f,-0x3f,sizeof(f));
	f[1][1]=1;
	for(int i=1;i<=n;++i){
		for(int j=1;j<=n;++j){
			for(int k=1;k<=min(i,j);++k){
				if(k==i&&i!=1||(k==j&&j!=1))continue;
                if(c[k][i]) f[i][j]=Max(f[i][j],f[k][j]+1);
				if(c[k][j]) f[i][j]=Max(f[i][j],f[i][k]+1);
			}
		}
	}
	if(f[n][n]<0) printf("1");
	else printf("%d",f[n][n]-1);
	return 0;
}