记录编号 40599 评测结果 AAAAAAATTT
题目名称 [河南省队2012] 座位问题 最终得分 70
用户昵称 Gravatar了反取字名我擦 是否通过 未通过
代码语言 C++ 运行时间 0.415 s
提交时间 2012-07-18 14:46:05 内存使用 2.60 MiB
显示代码纯文本
#include<fstream>
#include<string>
#include<algorithm>
#include<cmath>
#include<vector>

using namespace std;
ifstream fi("seat.in");
ofstream fo("seat.out");

struct point
{
	vector<int>line;
	int seated;
	int father;
	bool fg;
}map[100001];
void init(int k)
{
	map[k].fg=1;
	for(int i=0;i<map[k].line.size();i++)
	{
		if(!map[map[k].line[i]].fg)
		{
			map[map[k].line[i]].father=k;
			init(map[k].line[i]);
		}
	}
}
int dr(int k)
{
	if(k!=1)
		return map[k].seated+dr(map[k].father);
	else
		return map[k].seated;
}
int main()
{
	int n;
	fi>>n;
	for(int i=0;i<=n;i++)
	{
		map[i].seated=0;
		map[i].father=0;
		map[i].fg=0;
	}
	int t1,t2;
	for(int i=0;i<n-1;i++)
	{
		fi>>t1>>t2;
		map[t1].line.push_back(t2);
		map[t2].line.push_back(t1);
	}
	init(1);
	int a;
	for(int i=0;i<n;i++)
	{
		fi>>a;
		fo<<dr(a)<<endl;
		map[a].seated=1;
	}
	fi.close();
	fo.close();
	return 0;
}