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的更多相关文章

  1. 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 ...

  2. Codeforces Round #653 (Div. 3) E1. Reading Books (easy version) (贪心,模拟)

    题意:有\(n\)本书,A和B都至少要从喜欢的书里面读\(k\)本书,如果一本书两人都喜欢的话,那么他们就可以一起读来节省时间,问最少多长时间两人都能够读完\(k\)本书. 题解:我们可以分\(3\) ...

  3. 每日英语:Does China Face a Reading Crisis?

    For much of the last year, intellectuals and officials in China -- land of world-beating students an ...

  4. List the Books

    描述 Jim is fond of reading books, and he has so many books that sometimes it's hard for him to manage ...

  5. zoj 2727 List the Books

    List the Books Time Limit: 2 Seconds      Memory Limit: 65536 KB Jim is fond of reading books, and h ...

  6. 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 ...

  7. 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 ...

  8. 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 ...

  9. Linux SSH登录慢案例分析

    手头有台Linux服务器ssh登录时超级慢,需要几十秒.其它服务器均没有这个问题.平时登录操作都默默忍了.今天终于忍不住想搞清楚到底什么原因.搜索了一下发现了很多关于ssh登录慢的资料,于是自己也学着 ...

随机推荐

  1. C语言:用指针求最大值和最小值

    用指针求数组最大值和最小值(10分) 题目内容: 用指针求含有十个元素的数组最大值和最小值 主函数参考 int main() { int a[10],i,maxnum,minnum; for(i=0; ...

  2. vue后台管理框架

    vue后台管理框架 系列教程<一步步带你做vue后台管理框架>第一课 github地址:vue-framework-wz 线上体验地址:立即体验 在如今的科技公司中有很多前端的需求都是要写 ...

  3. docker重命名镜像

    一.docker tag IMAGEID(镜像id) REPOSITORY:TAG(仓库:标签)

  4. 【Java】 大话数据结构(4) 线性表之循环链表

    本文稍微介绍了一下循环链表. 将单链表终端结点的指针域由空指针改为指向头结点,形成一个环,这种头尾相接的单链表称为循环列表. 循环列表的结构如下图所示: 循环链表的优点:可以从任意一个结点出发,遍历所 ...

  5. 让HTML5来为你定位(转)

    add by zhj: HTML5的地理定位返回的应该都是GPS坐标,即WGS-84坐标,参见Map Types - Google Maps JavaScript API v3 本文使用的是Chrom ...

  6. HDU 5628 Clarke and math dp+数学

    Clarke and math 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5628 Description Clarke is a patient ...

  7. DrawFrameControl 绘制标准控件

    BOOL DrawFrameControl( HDC hDC,        // 设备环境句柄    LPRECT lpRect,  // 矩形区域    UINT nType,     // 控件 ...

  8. Codeforces Round #370 (Div. 2) C. Memory and De-Evolution 水题

    C. Memory and De-Evolution 题目连接: http://codeforces.com/contest/712/problem/C Description Memory is n ...

  9. hdu 5773 The All-purpose Zero 线段树 dp

    The All-purpose Zero 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5773 Description ?? gets an seq ...

  10. Android笔记(二):savedIndstanceState 和 Bundle

    savedIndstanceState savedIndstanceState 位于 Activity onCreate(Bundle savedInstanceState)方法的参数中.对这个参数的 ...