diff --git a/TangDou/Topic/P1828.cpp b/TangDou/Topic/P1828.cpp index 640ea05..80fb5f9 100644 --- a/TangDou/Topic/P1828.cpp +++ b/TangDou/Topic/P1828.cpp @@ -5,6 +5,10 @@ const int INF = 0x3f3f3f3f; int id[N]; int a, b, c, g[N][N], res = INF; int main() { +#ifndef ONLINE_JUDGE + freopen("P1828_11.in", "r", stdin); + // 参考答案:8 +#endif // 加快读入 ios::sync_with_stdio(false), cin.tie(0); int p, n, m; // p只奶牛,n个牧场,m条边 @@ -31,7 +35,7 @@ int main() { for (int i = 1; i <= n; i++) { // 每个牧场出发 int ans = 0; for (int j = 1; j <= p; j++) ans += g[i][id[j]]; - res = min(res, ans); + if (ans >= 0) res = min(res, ans); } printf("%d", res); return 0; diff --git a/TangDou/Topic/P1828_11.in b/TangDou/Topic/P1828_11.in new file mode 100644 index 0000000..aea7f2f --- /dev/null +++ b/TangDou/Topic/P1828_11.in @@ -0,0 +1,9 @@ +3 5 5 +2 +3 +4 +1 2 1 +1 3 5 +2 3 7 +2 4 3 +3 4 5 diff --git a/TangDou/Topic/【Floyd专题】.md b/TangDou/Topic/【Floyd专题】.md index d0ab3ac..f760c7a 100644 --- a/TangDou/Topic/【Floyd专题】.md +++ b/TangDou/Topic/【Floyd专题】.md @@ -443,7 +443,51 @@ int main() { ``` #### [$P1828$ [$USACO3.2$] 香甜的黄油 $Sweet$ $Butter$](https://www.luogu.com.cn/problem/P1828) +```cpp {.line-numbers} +#include +using namespace std; +const int N = 814; +const int INF = 0x3f3f3f3f; +int id[N]; +int a, b, c, g[N][N], res = INF; +int main() { +#ifndef ONLINE_JUDGE + freopen("P1828_11.in", "r", stdin); + // 参考答案:8 +#endif + // 加快读入 + ios::sync_with_stdio(false), cin.tie(0); + int p, n, m; // p只奶牛,n个牧场,m条边 + cin >> p >> n >> m; + memset(g, 0x3f, sizeof g); + for (int i = 1; i <= n; i++) g[i][i] = 0; // 初始化 + + for (int i = 1; i <= p; i++) cin >> id[i]; // i号奶牛,在id[i]这个牧场 + + while (m--) { + cin >> a >> b >> c; + g[a][b] = g[b][a] = min(c, g[a][b]); + } + // 标准的Floyd板子 + for (int k = 1; k <= n; k++) + for (int i = 1; i <= n; i++) { + if (g[i][k] == INF) continue; // floyd小优化 + for (int j = 1; j <= n; j++) + if (g[i][j] > g[i][k] + g[k][j]) + g[j][i] = g[i][j] = g[i][k] + g[k][j]; + } + + for (int i = 1; i <= n; i++) { // 每个牧场出发 + int ans = 0; + for (int j = 1; j <= p; j++) ans += g[i][id[j]]; + if (ans >= 0) res = min(res, ans); + } + printf("%d", res); + return 0; +} + +``` SSL-1761(城市问题)