## 1050: [HAOI2006]旅行comf

Time Limit: 10 Sec  Memory Limit: 162 MB
Submit: 2254  Solved: 1202
[Submit][Status][Discuss]

【样例输入1】
4 2
1 2 1
3 4 2
1 4
【样例输入2】
3 3
1 2 10
1 2 5
2 3 8
1 3
【样例输入3】
3 2
1 2 2
2 3 4
1 3

## Sample Output

【样例输出1】
IMPOSSIBLE
【样例输出2】
5/4
【样例输出3】
2

#include <iostream>
#include <vector>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <map>
#include <set>
#include <string>
#include <queue>
#include <stack>
#include <bitset>
using namespace std;
#define pb(x) push_back(x)
#define ll long long
#define mk(x, y) make_pair(x, y)
#define lson l, m, rt<<1
#define mem(a) memset(a, 0, sizeof(a))
#define rson m+1, r, rt<<1|1
#define mem1(a) memset(a, -1, sizeof(a))
#define mem2(a) memset(a, 0x3f, sizeof(a))
#define rep(i, n, a) for(int i = a; i<n; i++)
#define fi first
#define se second
typedef pair<int, int> pll;
const double PI = acos(-1.0);
const double eps = 1e-8;
const int mod = 1e9+7;
const int inf = 1061109567;
const int dir[][2] = { {-1, 0}, {1, 0}, {0, -1}, {0, 1} };
struct node
{
int u, v, w;
bool operator < (node a)const
{
return w<a.w;
}
}a[5005];
int f[505], n;
void init() {
for(int i = 1; i<=n; i++)
f[i] = i;
}
int findd(int u) {
return f[u] == u?u:f[u] = findd(f[u]);
}
int gcd(int a, int b) {
return b?gcd(b, a%b):a;
}
int main()
{
int m, s, t, maxx, minn;
cin>>n>>m;
for(int i = 0; i<m; i++) {
scanf("%d%d%d", &a[i].u, &a[i].v, &a[i].w);
}
cin>>s>>t;
sort(a, a+m);
double ans = inf;
for(int i = 0, j; i<m; ) {
init();
int flag = 0;
for(j = i; j<m; j++) {
int u = findd(a[j].u);
int v = findd(a[j].v);
if(u != v) {
f[u] = v;
}
if(findd(s) == findd(t)) {
flag = 1;
break;
}
}
if(flag) {
init();
int k;
for(k = j; ; k--) {
int u = findd(a[k].u);
int v = findd(a[k].v);
if(u!=v)
f[u] = v;
if(findd(s) == findd(t))
break;
}
if(ans>1.0*a[j].w/a[k].w) {
maxx = a[j].w;
minn = a[k].w;
ans = 1.0*a[j].w/a[k].w;
}
i = k+1;
} else {
break;
}
}
if(ans == inf) {
puts("IMPOSSIBLE");
} else {
int x = gcd(maxx, minn);
if(minn/x==1) {
printf("%d\n", maxx/x);
} else {
printf("%d/%d\n", maxx/x, minn/x);
}
}
return 0;
}

posted on 2016-03-01 13:14  yohaha  阅读(239)  评论(0编辑  收藏

• 随笔 - 305
• 文章 - 0
• 评论 - 6
• 引用 - 0