附上代码
```cpp
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=1100,M=1e4+5;
int n,m,f[N],u,v,w,s,t;
int tot,ans1,ans2;
double k,ans=1e9;
bool vis[N];
struct node{
int u,v,w;
}a[M];
int find(int s){
if(s!=f[s])
f[s]=find(f[s]);
return f[s];
}
bool cmp(node a,node b){
return a.w<b.w;
}
int gcd(int a,int b){
if(!b)return a;
return gcd(b,a%b);
}
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)f[i]=i,vis[i]=1;
for(int i=1;i<=m;i++){
scanf("%d%d%d",&u,&v,&w);
a[i].u=u,a[i].v=v,a[i].w=w;
if(find(u)!=find(v))f[find(u)]=find(v);
}
scanf("%d%d",&s,&t);
if(find(s)!=find(t)){
printf("IMPOSSIBLE");
return 0;
}
for(int i=1;i<=m;i++){
if(find(i)!=find(s))vis[i]=0;
}
sort(a+1,a+1+m,cmp);
for(int i=m;i>=1;i--){
if(!vis[a[i].u]||!vis[a[i].v])continue;
for(int j=1;j<=n;j++)f[j]=j;
int l=a[i].w,r=0,num=0;
for(int j=i;j>=1;j--){
u=a[j].u,v=a[j].v;
if(!vis[u]||!vis[v])continue;
if(find(u)==find(v))continue;
f[find(u)]=find(v);
if(find(s)==find(t)){
r=a[j].w;
break;
}
}
if(r){
k=double(l)/double (r);
if(k<ans){
ans=k;
ans1=r,ans2=l;
}
}else break;
}
k=gcd(ans1,ans2);
if(k==ans1)printf("%d",ans2/ans1);
else printf("%d/%d",ans2/int(k),ans1/int(k));
return 0;
}
by strange757 @ 2022-03-15 21:39:43
```cpp
for(int i=1;i<=m;i++){
if(find(i)!=find(s))vis[i]=0;
}
```
改成 $n$ 就好了。
by sleeping_crawlers @ 2022-03-15 22:04:33
@[strange757](/user/265453)
by sleeping_crawlers @ 2022-03-15 22:05:22
@[sleeping_crawlers](/user/148404) 非常感谢!!
by strange757 @ 2022-03-15 22:11:58