zoukankan      html  css  js  c++  java
  • codevs 1001 舒适的路线

    我到底什么时候才能学会不看题解把题写出来。。。。

    把所有的边从小到大排序,for一遍把当前边作为最大值,然后倒着for,更新答案即可。若不能更新答案则有IMPOSSIBLE。

    这是连续第二道没做出来的并查集了。

    某神犇说用spfa比较快。。。没验证过,也不想验证。

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<cmath>
    #define maxv 505
    #define maxe 5005
    using namespace std;
    struct edge
    {
    int u,v,w,nxt;
    }e[maxe];
    int s,t,n,m,g[maxv],x,y,z,father[maxv],nume=0;
    int ans1=0,ans2=0;
    double ans=1234567;
    void addedge(int u,int v,int w)
    {
    e[++nume].u=u;
    e[nume].v=v;
    e[nume].w=w;
    e[nume].nxt=g[u];
    g[u]=nume;
    }
    bool cmp(edge x,edge y)
    {
    return x.w<y.w;
    }
    int getfather(int x)
    {
    if (x!=father[x])
    father[x]=getfather(father[x]);
    return father[x];
    }
    void unionn(int x,int y)
    {
    x=getfather(x);
    y=getfather(y);
    if (x!=y)
    father[x]=y;
    }
    void work(int x)
    {
    int flag=0;
    for (int i=1;i<=n;i++)
    father[i]=i;
    int maxmax,minmin;
    maxmax=e[x].w;
    for (int i=x;i>=1;i--)
    {
    int r1=getfather(e[i].u),r2=getfather(e[i].v);
    if (r1!=r2) unionn(e[i].u,e[i].v);
    if (getfather(s)==getfather(t))
    {
    minmin=e[i].w;
    flag=1;
    break;
    }
    }
    if (flag==1)
    {
    double k=double(maxmax)/minmin;
    if (k<ans)
    {
    ans1=maxmax;
    ans2=minmin;
    ans=k;
    }
    }
    }
    int gcd(int a,int b)
    {
    if (b==0) return a;
    return gcd(b,a%b);
    }
    int main()
    {
    memset(g,0,sizeof(g));
    scanf("%d%d",&n,&m);
    for (int i=1;i<=m;i++)
    {
    scanf("%d%d%d",&x,&y,&z);
    addedge(x,y,z);
    }
    scanf("%d%d",&s,&t);
    sort(e+1,e+m+1,cmp);
    for (int i=1;i<=m;i++)
    work(i);
    if ((ans1==0) && (ans2==0))
    printf("IMPOSSIBLE ");
    else
    {
    int p=gcd(ans1,ans2);
    ans1=ans1/p;
    ans2=ans2/p;
    if (ans2!=1)
    printf("%d/%d",ans1,ans2);
    else printf("%d",ans1);
    }
    return 0;
    }

  • 相关阅读:
    看着四年前的代码,那时奋斗的模样,百感滋味
    操作系统中进程调度策略有哪几种?
    Linux操作系统及调用接口
    wpf 图像浏览(平移,缩放)
    C# double小数点的取舍
    C# 读写16位tif图片灰度数据
    WPF Slider滑块的使用
    WPF使用MVVMLight的ViewModel 访问控件的属性方法事件以及多页面传递信息
    苹果手机小米手环5收不到微信QQ消息提醒的解决办法
    AD覆铜设置规则
  • 原文地址:https://www.cnblogs.com/ziliuziliu/p/5077069.html
Copyright © 2011-2022 走看看