#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int father[505];
struct node
{
int a,b,v;
}s[5005];
int n;
void init()
{
for(int i = 0;i <=n;i++)
father[i] = i;
}
bool cmp(node p,node q)
{
return p.v > q.v;
}
int find(int x)
{
if(father[x]!=x)
father[x] = find(father[x]);
return father[x];
}
void Union(int a,int b)
{
int x = find(a);
int y = find(b);
if(x!=y)
{
father[x] = y;
}
}
int main()
{
int t,m,x,y,a,b,v,i,j;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&m);
for( i = 0;i < m;i++)
scanf("%d%d%d",&s[i].a,&s[i].b,&s[i].v);
sort(s,s+m,cmp);
int p = 0, q = 0;
scanf("%d%d",&x,&y);
int flag1 = 0;
double min = 1001000000.0;
int flag = 0;
for(i = 0;i < m;i++)
{
init();
for(j = i;j < m;j++)
{
Union(s[j].a,s[j].b);
if(find(x)==find(y))
{
double k = s[i].v*1.0/s[j].v*1.0;
if(k < min)
{
min = k;
p = i,q = j;
}
flag = 1;
break;
}
}
}
if(!flag) printf("IMPOSSIBLE\n");
else
{
int d = s[p].v;
int c = s[q].v;
while(d)
{
int r = c%d;
c = d;
d = r;
}
int u = s[p].v/c;
int z = s[q].v/c;
if(u%z) printf("%d/%d\n",u,z);
else printf("%d\n",u/z);
}
}
}
nyoj-最舒适的路线
最新推荐文章于 2019-04-28 10:00:07 发布