记录编号 227156 评测结果 AAAAAAAAAA
题目名称 [HAOI 2006]旅行 最终得分 100
用户昵称 Gravatarliu_runda 是否通过 通过
代码语言 C++ 运行时间 2.315 s
提交时间 2016-02-18 15:21:10 内存使用 0.31 MiB
显示代码纯文本
#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn=505;
const int maxm=5010;
int n,m;
int ufs[maxn];
int find(int x){
	if(ufs[x]!=x)ufs[x]=find(ufs[x]);
	return ufs[x];
}
void link(int a,int b){
	ufs[find(a)]=find(b);
}
void init(){
	for(int i = 1;i<=n;++i)ufs[i]=i;
}
struct edge{
	int a,b,v;
}lst[maxm];
bool cmp(const edge &a,const edge &b){
	return a.v<b.v;
}
int gcd(int a,int b){
	while(b%a!=0){
		int tmp=b%a;
		b=a;a=tmp;
	}	
	return a;
}
int main(){
	freopen("comf.in","r",stdin);
	freopen("comf.out","w",stdout);
	scanf("%d %d",&n,&m);
	init();
	for(int i=0;i<m;++i){
		scanf("%d %d %d",&lst[i].a,&lst[i].b,&lst[i].v);
		link(lst[i].a,lst[i].b);
	}
	int s,t;
	scanf("%d %d",&s,&t);
	if(find(s)!=find(t)){
		printf("IMPOSSIBLE\n");
	}
	else{
		double ans=1000000.0;int fenmu,fenzi;
		sort(lst,lst+m,cmp);
		for(int i=0;i<m;++i){
			init();
			for(int j=i;j<m;++j){
				link(lst[j].a,lst[j].b);
				if(find(s)==find(t)){
					if(ans>double(lst[j].v)/double(lst[i].v)){
						ans=double(lst[j].v)/double(lst[i].v);
						fenmu=lst[i].v;
						fenzi=lst[j].v;
					}
					break;
				}
			}
		}
		if(fenzi%fenmu==0)printf("%d",fenzi/fenmu);
		else{
			int tmp=gcd(fenmu,fenzi);
			printf("%d/%d",fenzi/tmp,fenmu/tmp);
		}
	}
	fclose(stdin);fclose(stdout);
	return 0;
}