[HAOI2006]旅行 暴力枚举+并查集维护联通

[HAOI2006]旅行COMF

https://ac.nowcoder.com/acm/problem/19963

题解:
暴力枚举+并查集维护联通
由于本题点的范围不大,并且边的范围在5000以内。
这样的话我们可以采用复杂度的算法。
类似于贪心的方法,把边权从小到大排序。
因为这个题目只取决于最大最小值,两者比值越小越好。
我们把边权挨着枚举一遍即可。
从边权最小开始枚举,用并查集维护,每次加入一条边,并且检查s与t是否连接起来,如果连接起来,那么直接与当前最小比较一下然后break。
break后,再从次小边开始枚举......再从第三小......直到枚举完所有边即可。
所有的情况都枚举过,所以可以确保一定包含最接近题目要求的值

/*Keep on going Never give up*/
#pragma GCC optimize(3,"Ofast","inline")
#include<bits/stdc++.h>
#define endl '\n'
#define int long long
using namespace std;
const int maxn=1e4+10;

struct edge{
    int x,y,w;
    bool operator < (const edge & a)const{
    return w<a.w;
    }
}a[maxn];


int f[maxn];

int ifind(int x){
    if(x==f[x]) return x;
    return f[x]=ifind(f[x]);
}



signed main() {
//    ios::sync_with_stdio(false);
//    cin.tie(nullptr);
    int n,m;
    cin>>n>>m;
    for(int i=0;i<m;i++){
        int x,y,v;
        cin>>x>>y>>v;
        a[i]={x,y,v};
    }
    sort(a,a+m);
    int s,t;
    cin>>s>>t;
    int imax=30000,imin=1;
    for(int i=0;i<m;i++){
        for(int i=0;i<=n;i++) f[i]=i;
        int tmin=a[i].w;
        for(int j=i;j<m;j++){
            int dx=ifind(a[j].x);
            int dy=ifind(a[j].y);
            if(dx!=dy) f[dx]=dy;
            if(ifind(s)==ifind(t)){
                int temp=imin*tmin;
                if(imax*temp/imin>a[j].w*temp/tmin){
                    int gcd=__gcd(tmin,a[j].w);
                    imax=a[j].w/gcd;
                    imin=tmin/gcd;
                }
                break;
            }
        }
    }
    if(imax==30000) cout<<"IMPOSSIBLE"<<endl;
    else{
        if(imin==1) cout<<imax<<endl;
        else cout<<imax<<"/"<<imin<<endl;
    }
}


全部评论

相关推荐

Kurumis:整个简历看下来就发现你其实对测试理解还很浅,很多地方都是硬凑上去,项目也是学生课设级别,没什么含金量 首先是学习建议: 1.系统性了解一个真实工程的框架,有利于你后续提升项目含金量,理解测试的逻辑 2.真正去学一下自动化测试和性能测试 再就是简历本身包装问题: 1.投测试的话就不要说自己独立开发自己测,专注描述自己怎么做测试的 2.项目经历太像套话,很容易让人怀疑你到底真的做过没有,比如并发是具体做了多少并发?自动化脚本是怎么跑兼容性和性能测试的?测试用例写了多少条? 3.教务管理系统一听就是数据库课设作业,含金量不高,不过你可以在原项目基础上重构扩展,比如添加docker容器部署MySQL和Redis,添加消息队列和锁机制防止系统扛不住高并发访问,让它真的像个实际工程 4.技能里性能专项测试没有把握不要乱写,就写你会什么工具就行了,做专项性能测试的都是行业大佬,你要写的话一定要有对应的专项性能测试项目 5.可以在简历里附上项目链接,压缩简历内容的同时提升简历真实性
今天你投了哪些公司?
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务