GDCPC 2008:B Reading books
Problem B
Reading books
(Input File: book.in / Standard Output)
In the summer vacation, LRJ wants to improve himself in computer science. So he finds out N books of computer science in the school library. The books are numbered from 0 to N-1.
To finish reading the i-th book, it takes LRJ time[i] minutes. But some books are similar in the content. If the i-th book and the j-th book are similar, then if LRJ has finished reading the i-th book, it will take him only minutes to finish reading the j-th book. Of course if LRJ has finished reading the j-th book, it will take him only minutes to finish reading the i-th book. Now you are asked to tell LRJ the minimal total time to finish reading all the N books.
Input:
The first line contains two integers N (0<=N<=100) and M (0<=M<=N*(N-1)/2). N is the total number of books. M is the number of pairs which are similar.
Then the following N lines describe time[0], time[1], … , time[N-1] (1<=time[i]<=105).
Next comes M lines, each contains two integer (i, j), indicating that the i-th book and the j-th book are similar.
Input is ended by N=0 and M=0.
Output:
For each test case, just output the minimal total time on a single line.
Sample input:
2 1
6
10
0 1
3 2
1
2
3
0 1
1 2
3 1
2
4
6
0 1
0 0
Sample output:
11
3
10
Hints:
For the first test case, if LRJ read the books in the order (0, 1), then the total time = 6+10/2=11; If in the order (1, 0), then the total time =10+ 6/2=13.
用矩阵将全部相似的书都标记起来,然后通过dfs去算和就可以
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std; int map[105][105],val[105],n,m,sum,minn;
int vis[105],ans; void dfs(int x)
{
vis[x] = 1;
sum+=val[x]/2;
if(minn == -1 || val[x]<minn)
minn = val[x];
for(int i = 0; i<n; i++)
{
if(!vis[i] && map[x][i])
dfs(i);
}
} int main()
{
int i,x,y;
while(~scanf("%d%d",&n,&m),n+m)
{
memset(map,0,sizeof(map));
memset(vis,0,sizeof(vis));
ans = 0;
for(i = 0; i<n; i++)
scanf("%d",&val[i]);
for(i = 0; i<m; i++)
{
scanf("%d%d",&x,&y);
map[x][y] = map[y][x] = 1;
}
for(i = 0; i<n; i++)
{
minn = -1;
if(vis[i])
continue;
sum = 0;
dfs(i);
ans = ans+sum-minn/2+minn;
}
printf("%d\n",ans);
} return 0;
}
GDCPC 2008:B Reading books的更多相关文章
- Reading books /// Prim+BFS oj21633
题目大意: 输入 N,M 接下来1-N行输入读该书的用时time[i] 接下来1-M行输入a,b 表示a和b是similar的 若a读过则读b用时为 time[b]/2 ,若b读过则读a用时为 ti ...
- Codeforces Round #653 (Div. 3) E1. Reading Books (easy version) (贪心,模拟)
题意:有\(n\)本书,A和B都至少要从喜欢的书里面读\(k\)本书,如果一本书两人都喜欢的话,那么他们就可以一起读来节省时间,问最少多长时间两人都能够读完\(k\)本书. 题解:我们可以分\(3\) ...
- 每日英语:Does China Face a Reading Crisis?
For much of the last year, intellectuals and officials in China -- land of world-beating students an ...
- List the Books
描述 Jim is fond of reading books, and he has so many books that sometimes it's hard for him to manage ...
- zoj 2727 List the Books
List the Books Time Limit: 2 Seconds Memory Limit: 65536 KB Jim is fond of reading books, and h ...
- From 《Soft Skill》——Chapter 69. My personal success book list
There have been many excellent books that have greatly influenced what I believe and how I behave. I ...
- Tips for newbie to read source code
This post is first posted on my WeChat public account: GeekArtT Reading source code is always one bi ...
- Codeforces Round #327 (Div. 2) B. Rebranding C. Median Smoothing
B. Rebranding The name of one small but proud corporation consists of n lowercase English letters. T ...
- Linux SSH登录慢案例分析
手头有台Linux服务器ssh登录时超级慢,需要几十秒.其它服务器均没有这个问题.平时登录操作都默默忍了.今天终于忍不住想搞清楚到底什么原因.搜索了一下发现了很多关于ssh登录慢的资料,于是自己也学着 ...
随机推荐
- centos redis 自动重启
配置init脚本 对于Centos,有一份https://gist.github.com/1335694 经过修改,如下: ########################## PATH=/usr/l ...
- Android Studio 3.0正式版填坑之路
原文:https://www.jianshu.com/p/9b25087a5d7d Android Studio 3.0启动图 序言 总看别人的文章,今天尝试着自己来写一篇.在逛论坛时候,无意间发 ...
- 【AtCoder】ARC090
C - Candies 前一枚举一个i,求第一行的前i个和第二行从第n个到第i个 代码 #include <bits/stdc++.h> #define fi first #define ...
- Java反射1——扫描某个包下的所有类
1.从包package中获取所有的Class /** * 从包package中获取所有的Class * * @param pack * @return */ public static Set< ...
- 003.KVM虚拟机部署-CentOS6.8
一 实验说明 CentOS 7的KVM虚拟机推荐使用qcow2磁盘格式,本实验在KVM中安装CentOS 6.8 64虚拟机. 二 命令部署过程 2.1 上传镜像 使用winscp上传至/data/i ...
- Nodejs新手村指引——30分钟上手
概要 #准备工作 #开启简单的服务 #路由 #获取参数的三种方式 #静态文件 #数据库集成 #async解决多重嵌套问题 本文适合没有nodejs项目开发经验而又想对nodejs有个大概了解的你阅读, ...
- 解决org.apache.jasper.JasperException: org.apache.jasper.JasperException: XML parsing error on file org.apache.tomcat.util.scan.MergedWebXml
1.解决办法整个项目建立时采用utf-8编码,包括代码.jsp.配置文件 2.并用最新的tomcat7.0.75 相关链接: http://ask.csdn.net/questions/223650
- QT学习笔记9:QTableWidget的用法总结
最近用QT中表格用的比较多,使用的是QTableWidget这个控件,总结一下QTableWidget的一些相关函数. 1.将表格变为禁止编辑: tableWidget->setEditTrig ...
- 解决jQueryUi AutoComplete在某些浏览器下无法出现候选项问题
在某些浏览器(如火狐),在使用AutoComplete进行绑定的时候,无法出现与关键字相似的候选项.其原因这里有描述: 解决方法可以采用下面方式: $('#bindInputId).bind(&quo ...
- 一个.net程序客户端更新方案
客户端程序一个很大的不便的地方就是程序集更新,本文这里简单的介绍一种通用的客户端更新方案.这个方案依赖程序集的动态加载,具体方案如下: 将程序集存储在一个文件数据库中,客户端所有程序集直接从文件数据库 ...