zoukankan      html  css  js  c++  java
  • 淼一淼A+B problem

    鲁迅:这可是道难题呢!

    鲁迅:我没说过这话,不过确实在理。


    某改题毕,但见LOJ之上有数「A+B」之AC记录。余亦尝闻A+B之趣味无穷,遂兴起而码之。

    少顷,AC之,吾心所畅。

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #define rint register int
    using namespace std;
    int a,b,tot,first[12],cnt,ans=0,fa[12];
    struct node{int u,v,w,nxt;}edge[12];
    inline bool cmp(node uu,node vv){return uu.w<vv.w;}
    inline void add(int uu,int vv,int ww)
    {
        edge[++tot]=(node){uu,vv,ww,first[uu]};
        first[uu]=tot;
    }
    inline int find(int x){return fa[x]==x?x:fa[x]=find(fa[x]);}
    inline void kruskal()
    {
        int sum=0;
        sort(edge+1,edge+tot+1,cmp);
        for(rint i=1;i<=cnt;++i)fa[i]=i;
        for(rint i=1;i<=tot;++i)
        {
            int x=find(edge[i].u),y=find(edge[i].v);
            if(x!=y)
            {
                fa[y]=x;sum++;
                ans+=edge[i].w;
            }
            if(sum==cnt-1)return ;
        }
    }
    int main()
    {
        scanf("%d %d",&a,&b);
        cnt=3;add(1,2,a),add(2,1,a);
        add(3,2,b),add(2,3,b);
        kruskal();
        cout<<ans<<endl;
        return 0;
    }
    Kruskal
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #define rint register int
    using namespace std;
    int a,b,tot,first[12],cnt,ans=0;
    int dist[12];
    bool vis[12];
    struct node{int u,v,w,nxt;}edge[12];
    inline void add(int uu,int vv,int ww)
    {
        edge[++tot]=(node){uu,vv,ww,first[uu]};
        first[uu]=tot;
    }
    inline void dijkstra(int x)
    {
        memset(dist,0x7f,sizeof(dist));
        dist[x]=0;
        for(rint i=1;i<cnt;++i)
        {
            int k=0;
            for(rint j=1;j<=cnt;++j)
                if(!vis[j]&&(k==0||dist[j]<dist[k]))
                    k=j;
            vis[k]=1;
            for(rint j=first[k];j;j=edge[j].nxt)
            {
                int y=edge[j].v;
                dist[y]=min(dist[y],edge[j].w+dist[k]);
            }
        }
        return ;
    }
    int main()
    {
        scanf("%d %d",&a,&b);
        cnt=3;add(1,2,a),add(2,3,b);
        dijkstra(1);
        cout<<dist[3]<<endl;
        return 0;
    }
    dijkstra
    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #define rint register int
    using namespace std;
    int a,b,l,r;
    int main()
    {
        l=1,r=100000000;
        scanf("%d %d",&a,&b);
        while(l<=r)
        {
            int mid=(l+r)>>1;
            if(a+b>mid)l=mid+1;
            else r=mid-1;
        }
        cout<<l<<endl;
        return 0;
    }
    二分答案
  • 相关阅读:
    更换电脑后,maven工程无法编译,错误提示:Could not calculate build plan: Plugin org.apache.maven.plugins:maven-resources-plugin:2.6
    Python Selenium下拉列表元素定位
    Python Selenium简单的窗口切换
    python测试报告
    python调用xlrd&xlsxwirter
    selenium-python PageObject设计模式
    python词典的基本操作
    python链接mysql数据库
    python冒泡写法
    python调用各个数据库模块
  • 原文地址:https://www.cnblogs.com/xingmi-weiyouni/p/11377727.html
Copyright © 2011-2022 走看看