已经疯狂了
最后五个点一直wa
有哪位大佬帮忙看看
#include<bits/stdc++.h>
using namespace std;
const int N=586,M=5086;
int n,m,s,t,ds[N];
struct Edge
{
int u;
int v;
int w;
bool operator <(const Edge &a)const{
return w<a.w;
}
}edge[M];
int find(int a){return ds[a]==a?a:ds[a]=find(ds[a]);}
void add(int a,int b){ds[a]=find(b);}
int kruskal(int minn)
{
for(int i=1;i<=n;i++) ds[i]=i;
int ans=0;
for(int i=minn;i<=m;i++)
{
if(find(edge[i].u)!=find(edge[i].v))
{
add(edge[i].u,edge[i].v);
if(find(s)==find(t))
{
ans=edge[i].w;
break;
}
}
}
return ans;
}
inline int read()
{
int X=0,w=1;
char ch=getchar();
while(ch<'0'||ch>'9') {if(ch=='-') w=-1;ch=getchar();}
while(ch>='0'&&ch<='9') X=(X<<3)+(X<<1)+ch-'0',ch=getchar();
return X*w;
}
int gcd(int a,int b)
{
if(b==0) return a;
else return gcd(b,a%b);
}
int main()
{
n=read();
m=read();
for(int i=1;i<=m;i++)
edge[i].u=read(),edge[i].v=read(),edge[i].w=read();
s=read();
t=read();
sort(edge+1,edge+1+m);
int ans1=50000,ans2=1;
for(int i=1;i<=m;i++)
{
int maxx=kruskal(i);
if(maxx==0) continue;
if(maxx*ans2<ans1*edge[i].w)
ans1=maxx,ans2=edge[i].w;
}
if(ans1==50000)
printf("IMPOSSIBLE");
else
if(ans1%ans2==0) printf("%d",ans1/ans2);
else printf("%d/%d",ans1/gcd(ans1,ans2),ans2/gcd(ans1,ans2));
return 0;
}