Floyd 没过样例一竟然 AC 了?

P1078 [NOIP2012 普及组] 文化之旅

```cpp namespace Floyd // Ac { #pragma GCC optimize(3) #pragma GCC optimize("Ofast") const int kMaxN = 100; int n, k, m, s, t; int dis[kMaxN + 5][kMaxN + 5]; int a[kMaxN + 5][kMaxN + 5], c[kMaxN + 5]; int read() { int res = 0; char ch = getchar(); while (!isdigit(ch)) ch = getchar(); while (isdigit(ch)) { res = res * 10 + ch - 48; ch = getchar(); } return res; } void init() { n = read(), k = read(), m = read(), s = read(), t = read(); for (int i = 1; i <= n; ++i) c[i] = read(); if (c[s] == c[t]) exit((puts("-1"), 0)); for (int i = 1; i <= k; ++i) for (int j = 1; j <= k; ++j) a[i][j] = read(); for (int i = 1; i <= n; ++i) for (int j = 1; j <= n; ++j) dis[i][j] = (i ^ j ? 0x3f3f3f3f : 0); for (int i = 1; i <= m; ++i) { int u = read(), v = read(), w = read(); dis[u][v] = dis[v][u] = w; } } void floyd() { for (int k = 1; k <= n; ++k) for (int i = 1; i <= n; ++i) for (int j = 1; j <= n; ++j) if (i ^ k and k ^ j and c[i] ^ c[k] and c[k] ^ c[j] and !a[c[i]][c[k]] and !a[c[j]][c[k]]) dis[i][j] = std::min(dis[i][j], dis[i][k] + dis[k][j]); std::cout << (dis[s][t] ^ 0x3f3f3f3f ? dis[s][t] : -1) << std::endl; } int main() { init(); floyd(); return 0; } }; ```
by Anguei @ 2018-06-26 13:12:56


@[yyfcpp](/space/show?uid=53062) 可能数据弱
by 越学越掂 @ 2018-06-26 13:17:16


@[yyfcpp](/space/show?uid=53062) 因为官方数据$aij$全是$0$
by tarjan @ 2018-06-26 13:18:33


@[tarjan](/space/show?uid=102098) 官方数据这么弱的吗。。
by Anguei @ 2018-06-26 13:27:06


@[yyfcpp](/space/show?uid=53062) 就是这样的,所以很多题解都是错的。
by tarjan @ 2018-06-26 13:28:43


太强大了%%%
by 404_notfound @ 2018-08-04 21:20:09


|