当前位置: 首页 > news >正文

poj 1789 Truck History(kruskal算法)

主题链接:http://poj.org/problem?id=1789

思维:一个一个点,每两行之间不懂得字符个数就看做是权值。然后用kruskal算法计算出最小生成树

我写了两个代码一个是用优先队列写的。可是超时啦,不知道为什么。希望有人能够解答。后面用的数组sort排序然后才AC。

code:

数组sort排序AC代码:

#include<cstdio>
#include<queue>
#include<algorithm>
#include<iostream>

using namespace std;

struct edge
{
    int from;
    int to;
    int cost;
};


bool cmp(edge e1,edge e2)
{
    return e1.cost<e2.cost;
}

edge node[2001*2001];

int father[2005];
int nn,n;

int find(int x)             //做并查集查找
{
    if(x!=father[x])
    {
        father[x]=find(father[x]);
    }
    return father[x];
}

void kruskal()
{
    int MST=0;
    for(int i=0;i<2005;i++)
    {
        father[i]=i;
    }
    for(int i=0;i<nn;i++)
    {
        int fx=find(node[i].from);
        int fy=find(node[i].to);
        if(fx!=fy)
        {
            father[fx]=fy;
            MST+=node[i].cost;
        }
    }
    printf("The highest possible quality is 1/%d.\n",MST);
}
int main()
{
    char str[2005][10];
    int i,j;
    while(scanf("%d",&n)==1&&n)
    {
        nn=0;
        for(i=0;i<n;i++)
        {
            scanf("%s",str[i]);
        }
        for(i=0;i<n;i++)
        {
            for(j=0;j<i;j++)
            {
                int sum=0;
                for(int kk=0;kk<7;kk++)
                {
                    if(str[i][kk]!=str[j][kk])
                    {
                        sum++;
                    }
                }
                node[nn].from=i;
                node[nn].to=j;
                node[nn].cost=sum;
                nn++;
            }
        }
        sort(node,node+nn,cmp);
        kruskal();
    }
    return 0;
}


优先队列超时代码

#include<cstdio>
#include<queue>
#include<algorithm>
#include<iostream>

using namespace std;

struct edge
{
    friend bool operator<(edge e1,edge e2)
    {
        return e1.cost>e2.cost;
    }
    int from;
    int to;
    int cost;
};

edge e;
priority_queue<edge> Q;
int father[2005];
int nn,n;
int find(int x)
{
    if(x!=father[x])
    {
        father[x]=find(father[x]);
    }
    return father[x];
}

void kruskal()
{
    int MST=0;
    for(int i=0;i<2005;i++)
    {
        father[i]=i;
    }
    int num=0;
    while(!Q.empty()&&num!=nn)
    {
        edge e=Q.top();
        //printf("BBB%d %d %d\n",e.from,e.to,e.cost);
        Q.pop();
        int fx=find(e.from);
        int fy=find(e.to);
        if(fx!=fy)
        {
            father[fx]=fy;
            MST+=e.cost;
            num++;
        }
    }
    printf("The highest possible quality is 1/%d.\n",MST);
}
int main()
{
    char str[2005][10];
    int i,j;
    while(scanf("%d",&n)==1&&n)
    {
        nn=0;
        while(!Q.empty()) Q.pop();
        for(i=0;i<n;i++)
        {
            scanf("%s",str[i]);
        }
        for(i=0;i<n;i++)
        {
            for(j=0;j<i;j++)
            {
                int sum=0;
                for(int kk=0;kk<7;kk++)
                {
                    if(str[i][kk]!=str[j][kk])
                    {
                        sum++;
                    }
                }
                nn++;
                e.from=i;
                e.to=j;
                e.cost=sum;
                Q.push(e);
                //printf("edge:%d %d %d %d\n",e.from,e.to,e.cost,nn);
            }
        }
        kruskal();
    }
    return 0;
}




版权声明:本文博客原创文章,博客,未经同意,不得转载。

相关文章:

  • OpenGL纹理数据块
  • 使用jQuery开发iOS风格的页面导航菜单
  • rsh 服务
  • Putty退出全屏
  • [Node + Docker] 聊聊怎么把 nodeclub 构建成 Docker 镜像
  • AS3编码规范(转)
  • 我的Android进阶之旅------ListView中android:cacheColorHint,android:listSelector属性作用 .
  • 技术人员在客户现场工作的注意事项
  • HDU 1520 Anniversary party
  • Android 计时应用 之 爱相随 V0.25
  • 杭电3790--最短路径问题(双权Dijkstra)
  • iostream迭代器的使用(11.18)
  • delphi 图像处理 二值化
  • 6个简单的解决方案解决Internet Explorer中的透明度问题
  • Atom飞行手册翻译: 3.5 创建主题
  • 002-读书笔记-JavaScript高级程序设计 在HTML中使用JavaScript
  • Computed property XXX was assigned to but it has no setter
  • flask接收请求并推入栈
  • github从入门到放弃(1)
  • Hexo+码云+git快速搭建免费的静态Blog
  • JavaScript 是如何工作的:WebRTC 和对等网络的机制!
  • Java编程基础24——递归练习
  • Promise初体验
  • Python3爬取英雄联盟英雄皮肤大图
  • Python利用正则抓取网页内容保存到本地
  • Python十分钟制作属于你自己的个性logo
  • Shadow DOM 内部构造及如何构建独立组件
  • Synchronized 关键字使用、底层原理、JDK1.6 之后的底层优化以及 和ReenTrantLock 的对比...
  • underscore源码剖析之整体架构
  • windows-nginx-https-本地配置
  • 基于游标的分页接口实现
  • 聊聊springcloud的EurekaClientAutoConfiguration
  • 前端
  • 全栈开发——Linux
  • 使用SAX解析XML
  • 吐槽Javascript系列二:数组中的splice和slice方法
  • 无服务器化是企业 IT 架构的未来吗?
  • 移动端 h5开发相关内容总结(三)
  • 用Python写一份独特的元宵节祝福
  • 鱼骨图 - 如何绘制?
  • Nginx惊现漏洞 百万网站面临“拖库”风险
  • 教程:使用iPhone相机和openCV来完成3D重建(第一部分) ...
  • ​VRRP 虚拟路由冗余协议(华为)
  • # 执行时间 统计mysql_一文说尽 MySQL 优化原理
  • ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
  • (1)STL算法之遍历容器
  • (173)FPGA约束:单周期时序分析或默认时序分析
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第2节(共同的基类)
  • (Forward) Music Player: From UI Proposal to Code
  • (LeetCode 49)Anagrams
  • (八)Spring源码解析:Spring MVC
  • (八)五种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (附源码)ssm户外用品商城 毕业设计 112346
  • (附源码)计算机毕业设计高校学生选课系统
  • (转)利用ant在Mac 下自动化打包签名Android程序