1355. 读书

★   输入文件:reading.in   输出文件:reading.out   简单对比
时间限制:1 s   内存限制:128 MB

【题目描述】

放暑假了,CHH想趁假期提高一下自己的计算机水平,于是他从学校图书馆借了N本计算机科学方面的书,这N本书的编号依次为0~N-1。

读完第i本书,CHH需要花费time[i]分钟,但是有一些书的内容是相近的,如果第i本书与第j本书内容相近,那么如果CHH读完了第i本书,再读第j本书的时候只需要floor(time[j]/2)分钟的时间即可(其中floor()表示对括号中的式子进行下取整);当然,如果CHH先读完了第j本书,那么再读第i本书的时候只需floor(time[i]/2)的时间。现在你的任务是告诉CHH,他最少可以用多少分钟读完这N本书。

【输入格式】

第一行有两个整数N(0<=N<=100)和M(0<=M<=N(N-1)/2)。N为书的总数,有M对书内容相近。

接下来有N行,分别表示time[0],time[1],...及time[N-1],(1<=time[i]<=10^5)。

再接下来有M行,每行有两个整数(i,j),表示第i本书与第j本书内容相近。

输入文件以N=0,M=0表示结束。

【输出格式】

对于每组测试数据,输出仅一行,即最少时间。

【样例输入】

2 1
6
10
0 1
3 2
1
2
3
0 1
1 2
3 1
2
4
6
0 1
0 0

【样例输出】

11
3
10

【提示】

对于第一组数据,如果CHH读的顺序为(0,1),则总的时间为6+10/2=11,如果读的顺序为(1,0),则总的读书时间为10+6/2=13.

思路:

  题目中提及:

     两本书之间可能内容相近,所以我们可以采用并查集,然后贪心选一个集合中用时最小的书,剩下的除2加入总时间即可。

     故我们可以用kruskal来做这道题

坑点:

  1)若出现m==0 但是 n!=0,此时不要退出程序!!!

  2)要从0开始进行标号

上代码:

#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>
using namespace std; const int N = ;
const int M = ;
int n,m,ans;
int t[N],dad[N];
bool vis[N]; int getdad(int x)
{return dad[x] == x ? x : dad[x] = getdad(dad[x]);} void kruskal()
{
while(true)
{
int flag=-;
int tmp[]={},cnt=;
for(int i=;i<n;i++)
{
if(flag==- && !vis[i])
{
vis[i]=true;
flag=getdad(i);
tmp[++cnt]=t[i];
}
else if(flag!=- && !vis[i] && getdad(i)==flag)
{
vis[i]=true;
tmp[++cnt]=t[i];
}
}
if(!cnt)
{
cout<<ans<<endl;
break;
}
sort(tmp+,tmp++cnt);
ans+=tmp[];
for(int i=;i<=cnt;i++)
ans+=floor(tmp[i]>>);
}
} void chu()
{
ans=;
memset(t,,sizeof(t));
memset(vis,false,sizeof(vis));
memset(dad,,sizeof(dad));
} int main()
{
freopen("reading.in","r",stdin);
freopen("reading.out","w",stdout);
while(cin>>n>>m)
{
if(n== && m==)
break;
chu();
for(int i=;i<n;i++)
cin>>t[i],dad[i]=i;
for(int i=,u,v;i<m;i++)
{
cin>>u>>v;
int f1=getdad(u),f2=getdad(v);
if(f1!=f2)
dad[f1]=f2;
}
kruskal();
}
return ;
}

cogs1355. 读书的更多相关文章

  1. 读书笔记汇总 - SQL必知必会(第4版)

    本系列记录并分享学习SQL的过程,主要内容为SQL的基础概念及练习过程. 书目信息 中文名:<SQL必知必会(第4版)> 英文名:<Sams Teach Yourself SQL i ...

  2. 使用po模式读取豆瓣读书最受关注的书籍,取出标题、评分、评论、题材 按评分从小到大排序并输出到txt文件中

    #coding=utf-8from time import sleepimport unittestfrom selenium import webdriverfrom selenium.webdri ...

  3. 【读书】PHP程序员要读的书目(不断完善中)

    本文地址 分享提纲: 1. PHP 2. Linux 3. Apache/Nginx 4. Mysql 5.设计模式/架构 6. 缓存并发 7. 其他语言 8. 代码基础 9. 大前端 10. 管理生 ...

  4. 《图解HTTP》读书笔记

    目前国内讲解HTTP协议的书是在太少了,记忆中有两本被誉为经典的书<HTTP权威指南>与<TCP/IP详解,卷1>,但内容晦涩难懂,学习难度较大.其实,HTTP协议并不复杂,理 ...

  5. 《图解TCP/IP》读书笔记

    一.国际惯例:书托 这是一本图文并茂的网络管理技术书籍,旨在让广大读者理解TCP/IP的基本知识.掌握TCP/IP的基本技能. 书中讲解了网络基础知识.TCP/IP基础知识.数据链路.IP协议.IP协 ...

  6. 读书笔记--SQL必知必会18--视图

    读书笔记--SQL必知必会18--视图 18.1 视图 视图是虚拟的表,只包含使用时动态检索数据的查询. 也就是说作为视图,它不包含任何列和数据,包含的是一个查询. 18.1.1 为什么使用视图 重用 ...

  7. 【读书笔记】2016.12.10 《构建高性能Web站点》

    本文地址 分享提纲: 1. 概述 2. 知识点 3. 待整理点 4. 参考文档 1. 概述 1.1)[该书信息] <构建高性能Web站点>: -- 百度百科 -- 本书目录: 第1章 绪论 ...

  8. [转]ThoughtWorks(中国)程序员读书雷达

    http://agiledon.github.io/blog/2013/04/17/thoughtworks-developer-reading-radar/#rd?sukey=f64bfa68330 ...

  9. 《深入理解Java内存模型》读书总结

    概要 文章是<深入理解Java内容模型>读书笔记,该书总共包括了3部分的知识. 第1部分,基本概念 包括"并发.同步.主内存.本地内存.重排序.内存屏障.happens befo ...

随机推荐

  1. python3列表、元组

    列表.元组操作 列表是我们最以后最常用的数据类型之一,通过列表可以对数据实现最方便的存储.修改等操作.列表中的每个元素都分配一个数字也就是它的位置,或叫索引,第一个索引是0,第二个索引是1,依此类推. ...

  2. GukiZ and Binary Operations CodeForces - 551D (组合计数)

    大意: 给定$n,k,l,m$, 求有多少个长度为$n$, 元素全部严格小于$2^l$, 且满足 的序列. 刚开始想着暴力枚举当前or和上一个数二进制中$1$的分布, 但这样状态数是$O(64^3)$ ...

  3. 9.bash历史的交互使用

    9.历史的交互使用本章从用户的角度介绍了如何使用 GNU 的历史库功能.可以把这里的内容作为用户指南.关于如何在其它程序中使用 GNU 的历史库功能,请参考<GNU Readline 库参考手册 ...

  4. C#拷贝文件

    public void FileCopy(string source, string target) { using (FileStream fileRead = new FileStream(sou ...

  5. Navicat for Mysql报错1251连接不成功Mysql

    第一步:打开Command Line Client   看清楚不是cmd,是在mysql的目录下,你会发现有2个一模一样其实哪个都行 第二步:输入mysql密码回车    就是安装mysql时设置的密 ...

  6. MySQL之常见错误

    1)mysql导入较大sql文件,出现MySQL server has gone away ERROR (HY000) at line in file: 'E:\xampp\htdocs\SsCpc\ ...

  7. SSH远程连接工具汇总

    1)Xshell 常见问题: 1) 终端中的字体横向显示 字体中带有@的均为横向字体, 只要选择一个不带@的字体即可 2)putty 常见问题: 1)putty中编辑脚本,文字呈现蓝色,辨识度较差,需 ...

  8. vue访问本地文件404

    用了vue cli3.0用axios调用本地json数据一直报404,找了半天郁闷,最后发现原因是,vue cli3.0 public 文件夹才是静态资源文件,问题解决,记录一下,以后不再踩坑.

  9. 面向对象相关概念与在python中的面向对象知识(魔法方法+反射+元类+鸭子类型)

    面向对象知识 封装 封装的原理是,其成员变量代表对象的属性,方法代表这个对象的动作真正的封装是,经过深入的思考,做出良好的抽象(设计属性时用到),给出“完整且最小”的接口,并使得内部细节可以对外透明( ...

  10. 02.Zabbix⾃定义监控项

    1.zabbix⾃定义监控初试 如何获取系统中想监控对象的值,获取后⼜如何将该值传递给Zabbix-Server 1.1.监控系统中的对象 #(系统监控命令 + awk + 筛选条件 = 监控的状态值 ...