题解 UVA10099 The Tourist Guide
Kevin_Zhen · · 题解
题目链接
可能更好的阅读体验。
输出格式
如果您是一名饱经 UWaA 摧残的老手,养成了绝不多输出换行的良好习惯,那么恭喜您,本题需要多输出换行。
具体地,如果您是如下写法,特判在所有不是第
if (++cnt != 1) putchar('\n');
printf("Scenario #%d\nMinimum Number of Trips = ", cnt);
if (num % f[s][t] == 0) printf("%d", num / f[s][t]);
else printf("%d", num / f[s][t] + 1);
putchar('\n');
请改为:
printf("Scenario #%d\nMinimum Number of Trips = ", ++cnt);
if (num % f[s][t] == 0) printf("%d\n", num / f[s][t]);
else printf("%d\n", num / f[s][t] + 1);
putchar('\n');
为您的 AC 献上礼炮。
题目描述
有
如上图,G 先生想要亲自把
输入格式
本题有多组数据。
对于每组数据:
第一行两个正整数
接下来
最后一行三个正整数
当
输出格式
每组数据输出两行:
第一行,输出 “Scenario #x”,x 为当前是第几组数据。
第二行,输出 “Minimum Number of Trips = ans”,ans 为所求答案。
每组输出最后应输出两次换行。
解题思路
题目要求我们找到从
如果
注意当求出
AC CODE
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
const int maxn = 1010;
int n, m, s, t, cnt, num, f[maxn][maxn];
int main() {
while (scanf("%d%d", &n, &m)) {
if (!n && !m) break;
memset(f, 0, sizeof(f));
for (int i = 1; i <= m; ++i) {
int p1, p2; scanf("%d%d", &p1, &p2);
scanf("%d", &f[p1][p2]); f[p2][p1] = f[p1][p2];
}
for (int k = 1; k <= n; ++k) {
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= n; ++j) f[i][j] = max(f[i][j], min(f[i][k], f[k][j]));
}
}
scanf("%d%d%d", &s, &t, &num); --f[s][t];
printf("Scenario #%d\nMinimum Number of Trips = ", ++cnt);
if (num % f[s][t] == 0) printf("%d\n", num / f[s][t]);
else printf("%d\n", num / f[s][t] + 1);
putchar('\n');
}
return 0;
}