您的位置:首页 > 其它

SZU:B36 Reading books

2013-05-15 20:07 239 查看

Description

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

and

. N is the total number of books. M is the number of pairs which are similar.

Then the following N lines describe

.

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

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


Sample Output

11
3
10

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

Ps :这道题我看错题意了,导致一直无法AC,而且被无法言喻的提示误导了。原来这个(0,1)顺序是自动找出i,j 书最少时间的,思想错了,导致做了一下午无法解决
   其实少了dd这个老师,挺难过的说。

#include<stdio.h>
int num[120];
int root(int n)
{
if(n!=num
)
n=root(num
);
return n;
}
int main()
{
int m,n,i,sum,a,b,time[120];
while(scanf("%d%d",&m,&n)!=EOF){
for(i=0;i<m;i++){
scanf("%d",&time[i]);
num[i]=i;
}
for(i=0;i<n;i++){
scanf("%d%d",&a,&b);
a=root(a);
b=root(b);
if(time[a]<time[b])
num[b]=a;
else num[a]=b;
}
sum=0;
for(i=0;i<m;i++){
if(num[i]==i)
sum+=time[i];
else sum+=time[i]/2;
}
printf("%d\n",sum);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: