走亲访友
作者:互联网
又到了过节的时候了,少不了的就是拜访亲友,小丁也是如此。
小丁这次要去姥姥家,因为没有直达的路,所以小丁要通过坐车在一些站点进行中转。为了使旅程不那么无聊,小丁想要这一路上坐车最长的时间和坐车最短的时间的比值尽可能的小。
输入格式:
第一行输入两个正整数,,分别代表站点的个数以及所有站点之间路的条数。
接下来的 M行每行包括三个正整数,,表示从站点u坐车到站点v需要w单位的时间。当然,从站点v坐车到站点u也需要w单位的时间。
最后一行输入两个正整数分别代表小丁家所在的站点和小丁姥姥家所在的站点。
数据保证有 1。
输出格式:
若小丁不能到达姥姥家,输出 IMPOSSIBLE
,否则输出一个数代表最小的时间比。
如果需要,输出一个最简分数。
输入样例1:
4 2
1 2 1
3 4 2
1 4
输出样例1:
IMPOSSIBLE
输入样例2:
3 3
1 2 10
1 2 5
2 3 8
1 3
输出样例2:
5/4
输入样例3:
3 2
1 2 2
2 3 4
1 3
输出样例3:
2
#include <bits/stdc++.h> #define int long long using namespace std; int n, m, pre[505], fenzi, fenmu; double temp = 0x3f3f3f3f; struct edge { int s, t, w; } e[5005]; void init() { for (int i = 1; i <= n; i++) pre[i] = i; } int find(int x) { if (pre[x] == x) return x; return pre[x] = find(pre[x]); } void merge(int x, int y) { pre[find(x)] = find(y); } int cmp(edge a, edge b) { return a.w < b.w; } signed main() { //freopen("in", "r", stdin); ios::sync_with_stdio(false); cin >> n >> m; for (int i = 1; i <= m; i++) cin >> e[i].s >> e[i].t >> e[i].w; sort(e + 1, e + m + 1, cmp); int u, v; cin >> u >> v; for (int i = 1; i <= m; i++) { double maxx = -1, minx = 0x3f3f3f3f; init(); for (int j = i; j <= m; j++) { merge(e[j].s, e[j].t); maxx = max(maxx, 1.0 * e[j].w); minx = min(minx, 1.0 * e[j].w); if (find(u) == find(v)) { if (maxx / minx < temp) { temp = maxx / minx; fenzi = maxx; fenmu = minx; } break; } } } if (temp == 0x3f3f3f3f) cout << "IMPOSSIBLE" << endl; else { int g = __gcd(fenzi, fenmu); fenzi /= g; fenmu /= g; if (fenmu == 1) cout << fenzi << endl; else cout << fenzi << "/" << fenmu << endl; } return 0; }View Code
标签:输出,走亲访友,int,样例,小丁,站点,输入 来源: https://www.cnblogs.com/xcfxcf/p/12341983.html