记录编号 58100 评测结果 AAAAAAAAAA
题目名称 读书 最终得分 100
用户昵称 Gravatar苏轼 是否通过 通过
代码语言 C++ 运行时间 0.008 s
提交时间 2013-04-17 14:12:04 内存使用 3.29 MiB
显示代码纯文本
#include <fstream>
#include <vector>
using namespace std;
ifstream fi("reading.in");
ofstream fo("reading.out");
int n,m,t[101],ans,mi,x;
bool g[101][101],f[101];
vector <int> v;
void init()
{
	int i,a,b,j;
	for (i=0;i<=n;i++)
		for (j=0;j<=n;j++) g[i][j]=false;
	for (i=0;i<n;i++) f[i]=true;
	for (i=0;i<n;i++) fi>>t[i];
	for (i=1;i<=m;i++)
	{
		fi>>a>>b;
		g[a][b]=true;g[b][a]=true;
	}
	ans=0;
}
void dfs(int u)
{
	int r;
	f[u]=false;v.push_back(u);
	for (r=0;r<n;r++)
	{
		if (f[r]&&g[u][r])
		{
			f[r]=false;dfs(r);
		}			
	}
}
int main()
{
	int i,j;
	fi>>n>>m;
	while (n!=0||m!=0)
	{
		init();
		for (i=0;i<n;i++)
		{
			if (f[i])
			{
				dfs(i);mi=999999999;
				for (j=0;j<v.size();j++)
				{
					ans+=t[v[j]]/2;
					if (t[v[j]]<mi) {mi=t[v[j]];x=j;}
				}
				if (t[v[x]]%2==0) ans+=t[v[x]]/2;else {ans+=t[v[x]]/2;ans++;}
				v.clear();
			}
		}
		fo<<ans<<endl;
		fi>>n>>m;
	}
	return 0;
}