nyoj-最舒适的路线

来源:互联网 发布:win10没有软件 编辑:程序博客网 时间:2024/04/29 20:30
#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);        }    }}       

0 0
原创粉丝点击