记录编号 234212 评测结果 AAAAAAAAAA
题目名称 读书 最终得分 100
用户昵称 GravatarSky_miner 是否通过 通过
代码语言 C++ 运行时间 0.002 s
提交时间 2016-03-07 16:02:08 内存使用 0.29 MiB
显示代码纯文本
#include<cstdio>
using namespace std;
const int maxn = 100 + 10 ;
struct Node{
	int root;
	int time;
	bool key;
}G[maxn];
int ans;
int find(const int x){
	if( G[x].root != x){
		int r = G[x].root;
		G[x].root = find(G[x].root);
		if( G[x].key ) {
			G[x].time = G[x].time>>1 ;	
			G[x].key = false ;
		}
	}
	return G[x].root;
}
void work(const int &x,const int &y ){
	int rx = find(x);
	int ry = find(y);
	if( rx != ry ){
		if(G[rx].time > G[ry].time ){
			G[rx].root = ry;
			ans-=G[rx].time - (G[rx].time>>1);
			G[rx].time = G[rx].time>>1;
			G[rx].key = false;	
			
		}
		else{
			G[ry].root = rx;
			ans-=G[ry].time - (G[ry].time>>1);
			G[ry].time = G[ry].time>>1;
			G[ry].key = false;
		}
		
	}	
}
int main(){
	int n,m;
	#define Work
	#ifdef Debug
		freopen("C://Users//Administrator//Documents//test_in.txt","r",stdin);
		freopen("C://Users//Administrator//Documents//test_out.txt","w",stdout);
	#endif
	#ifdef Work
		freopen("reading.in","r",stdin );
		freopen("reading.out","w",stdout);
	#endif
	while(scanf("%d%d",&n,&m) == 2 && ( m!=0 || n!=0 ) ){
		ans = 0;
		for(int i=1;i<=n;i++){
			G[i].root = i;
			scanf("%d",&G[i].time); 
			ans+= G[i].time;
			G[i].key = true ;
		}
		int u,c;
		//printf("--------->%d\n",m);
		for(int i=1;i<=m;i++){
			scanf("%d%d",&u,&c);
			work(u+1,c+1);
		}
		printf("%d\n",ans);		
	}
	return 0;
}