记录编号 |
40599 |
评测结果 |
AAAAAAATTT |
题目名称 |
[河南省队2012] 座位问题 |
最终得分 |
70 |
用户昵称 |
了反取字名我擦 |
是否通过 |
未通过 |
代码语言 |
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;
}