【发布时间】:2017-10-18 06:26:13
【问题描述】:
这是一个dfs功能码sn-p:-
void dfs(int u, int p)
{
if(p!=-1)d[u] = d[p]+1;
for(int i: v[u])
{
if(i==p)continue;
dfs(i, u);
}
}
我不理解比赛社论中的这个 dfs 实现。完整代码如下。如果有人能帮我理解这段代码,那就太好了
#include <bits/stdc++.h>
using namespace std;
#define int long long int
vector<int> d;
vector< vector<int> > v;
void dfs(int u, int p)
{
if(p!=-1)d[u] = d[p]+1;
for(int i: v[u])
{
if(i==p)continue;
dfs(i, u);
}
}
#undef int
int main()
{
#define int long long int
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int n;
cin>>n;
v.resize(n);
d.resize(n);
for(int i = 0;i<n-1;i++)
{
int x, y;
cin>>x>>y;
v[x-1].push_back(y-1);
v[y-1].push_back(x-1);
}
d[0] = 0;
dfs(0, -1);
int q;
cin>>q;
while(q--)
{
int x, y;
cin>>x>>y;
if((d[x-1]+d[y-1])&1)cout<<"Odd"<<endl;
else cout<<"Even"<<endl;
}
return 0;
}
【问题讨论】:
-
提交给“竞赛”网站或“在线评委”的代码往往写得不好,而且没有人真正应该将其用作学习材料。恰当的例子:用宏重新定义基本的内置类型; Including
<bits/stdc++.h>;命名错误的变量;没有文档或 cmets。如果你想学习 C++ 编程,那么read good books 或去学校。 -
没有什么比重新定义关键字更能丰富您的代码了。接下来
#define double float -
@Someprogrammerdude 几天前,我正在审查我们办公室下一阶段应届生招聘的一些试卷。我很惊讶实际上每个人都包括
bits/stdc++.h。我问其他人这些天学生主要看什么书,我的一位年轻同事回答说Code::Blocks自动生成。 -
@taskinoor 我刚刚尝试过使用 Code::Blocks,除非你的同事使用 very 旧版本(比上一个将近两年前的二进制版本旧得多)它不会生成该包含。
-
@taskinoor 我也使用代码块,但它不这样做