记录编号 58113 评测结果 AAAAAAAAAA
题目名称 读书 最终得分 100
用户昵称 Gravatarcstdio 是否通过 通过
代码语言 C++ 运行时间 0.007 s
提交时间 2013-04-17 15:33:20 内存使用 0.35 MiB
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<deque>
#include<algorithm>
#include<set>
using namespace std;
const int SIZEN=101,INF=0x7fffffff;
int n,m;
int c[SIZEN][SIZEN]={0};
int belong[SIZEN]={0};
int amin[SIZEN];
int sum,tot;
int t[SIZEN]={0};
bool flag=true;
void read(void){
	sum=tot=0;
	cin>>n>>m;
	if(!n&&!m){
		flag=false;
		return;
	}
	int i,j,a,b;
	for(i=0;i<n;i++) cin>>t[i],sum+=(t[i]/2);
	for(i=0;i<=n;i++) amin[i]=INF,belong[i]=0;
	for(i=0;i<n;i++){
		for(j=0;j<n;j++) c[i][j]=0;
	}
	for(i=0;i<m;i++){
		cin>>a>>b;
		c[a][b]=c[b][a]=1;
	}
}
void DFS(int x,int ind){
	if(belong[x]) return;
	belong[x]=ind;
	amin[ind]=min(amin[ind],t[x]-(t[x]/2));
	int i;
	for(i=0;i<n;i++){
		if(!c[x][i]) continue;
		DFS(i,ind);
	}
}
void work(void){
	int i;
	for(i=0;i<n;i++){
		if(!belong[i]) DFS(i,++tot);
	}
	for(i=1;i<=tot;i++){
		sum+=amin[i];
	}
	printf("%d\n",sum);
}
int main(){
	freopen("reading.in","r",stdin);
	freopen("reading.out","w",stdout);
	while(flag){
		read();
		if(flag) work();
	}
	return 0;
}