zoukankan      html  css  js  c++  java
  • bzoj1050:旅行comf

    orz,调试了很久结果忘了数据类型转换尼玛早上也是一样被这个坑了好久,然而还继续wa,不过样例能过,于是我猜测最近评测器总有问题(大雾。。。)遂不理;

    题目嘛,还好,枚举一下就好了;

    1050: [HAOI2006]旅行comf

    Time Limit: 10 Sec  Memory Limit: 162 MB
    Submit: 1893  Solved: 979
    [Submit][Status][Discuss]

    Description

    给你一个无向图,N(N<=500)个顶点, M(M<=5000)条边,每条边有一个权值Vi(Vi<30000)。给你两个顶点S和T,求一条路径,使得路径上最大边和最小边的比值最小。如果S和T之间没有路径,输出”IMPOSSIBLE”,否则输出这个比值,如果需要,表示成一个既约分数。 备注: 两个顶点之间可能有多条路径。

    Input

    第一行包含两个正整数,N和M。 下来的M行每行包含三个正整数:x,y和v。表示景点x到景点y之间有一条双向公路,车辆必须以速度v在该公路上行驶。 最后一行包含两个正整数s,t,表示想知道从景点s到景点t最大最小速度比最小的路径。s和t不可能相同。

    Output

    如果景点s到景点t没有路径,输出“IMPOSSIBLE”。否则输出一个数,表示最小的速度比。如果需要,输出一个既约分数。

    Sample Input

    【样例输入1】
    4 2
    1 2 1
    3 4 2
    1 4
    【样例输入2】
    3 3
    1 2 10
    1 2 5
    2 3 8
    1 3
    【样例输入3】
    3 2
    1 2 2
    2 3 4
    1 3

    Sample Output

    【样例输出1】
    IMPOSSIBLE
    【样例输出2】
    5/4
    【样例输出3】
    2

    HINT

    【数据范围】

    1<  N < = 500

    1 < = x, y < = N,0 < v < 30000,x ≠ y

    0 < M < =5000

    Source

    #include<iostream>
    #include<cstring>
    #include<cstdio>
    #include<algorithm>
    using namespace std;
    #define rep(i,n) for(int i=0;i<n;i++)
    #define clr(x,c) memset(x,c,sizeof(x))
    const int nmax=501;
    const int maxn=30001;
    int f[nmax];
    struct edge{
      int from,to,dist;
    }edges[maxn];
    int find(int x){
      return f[x]==x?x:f[x]=find(f[x]);
    }
    int comp(const edge&a,const edge&b){
       return a.dist<b.dist;
    }
    int gcd(int a,int b){
      return b==0?a:gcd(b,a%b);
    }
    int main(){
       int n,m,i,j,k,l,s,t;
       bool F;
       double ans=0x3f3f3f3f;
       int ans1,ans2;
       cin>>n>>m;
       rep(i,m){
          cin>>edges[i].from>>edges[i].to>>edges[i].dist;
       }
       cin>>s>>t;
       sort(edges,edges+m,comp);
       rep(i,m){
         F=false;
         rep(k,n) f[k]=k;
         for(j=i;j<m;j++){
           edge u=edges[j];
           int ll=u.from;l=u.to;
           if(find(ll)!=find(l)) f[ll]=l;
           if(find(s)==find(t)){
             F=true;
             break;
           }
           }
         if(F){
           if(double(edges[j].dist)/double(edges[i].dist)<ans){
          
             ans=double(edges[j].dist)/double(edges[i].dist);
             ans1=edges[j].dist;
             ans2=edges[i].dist;
           }
         }
       }
       if(ans==0x3f3f3f3f) {
         cout<<"IMPOSSIBLE";
         return 0;
       }
       int o=gcd(ans1,ans2);
       if(ans2==o) cout<<ans1/o;
       else cout<<ans1/o<<"/"<<ans2/o;
       return 0;
    }

  • 相关阅读:
    在rhel上配置yum 源
    python2.7 使用生成器方式实现斐波那契数列
    Web 应用程序测试思考
    python2.7 可迭代对象、迭代器和迭代的概念说明
    python2.7 zipfile 的简单用法
    python函数定义中的参数说明
    python 内置函数filter、map、reduce的使用说明
    python虚拟环境迁移
    python yaml 文件解析及str、repr函数的说明
    python xlrd、xlwt、xlutils操作excel文件
  • 原文地址:https://www.cnblogs.com/20003238wzc--/p/4750711.html
Copyright © 2011-2022 走看看