此题让我知道了快读和取消同步后的cin貌似不能一起用?
算了,反正取消同步后的cin也挺快的。
代码实现如下:
#includeusing namespace std;#define rep(i, a, b) for (register int i = (a); i <= (b); i++)const int maxm = 1e2 + 5;;int n, v, ans = 1;int dp[maxm][maxm];bool vis[maxm][maxm];string s, s1, s2;map map_city;int MAX(int a, int b) { return a > b ? a : b;}void write(int x) { if (x < 0) { putchar('-'); x = -x; } if (x > 9) write(x / 10); putchar(x % 10 + '0');}int main() { std::ios::sync_with_stdio(false); std::cin.tie(0); cin >> n >> v; rep(i, 1, n) { cin >> s; map_city[s] = i; } rep(i, 1, v) { cin >> s1 >> s2; vis[map_city[s1]][map_city[s2]] = 1; vis[map_city[s2]][map_city[s1]] = 1; } dp[1][1] = 1; rep(i, 1, n - 1) rep(j, i + 1, n)//i,j之后会对换,所以j就直接从i + 1开始. rep(k, 1, j - 1) if (vis[j][k] && dp[i][k]) dp[i][j] = dp[j][i] = MAX(dp[i][j], dp[i][k] + 1); rep(i, 1, n) if (vis[i][n]) ans = MAX(ans, dp[i][n]); write(ans); return 0;}