我试图解决this competition中的问题D(阅读任务并不重要),并且我注意到,使同一件事的这两个代码在执行时间上略有不同:
map < string, vector <string> > G;
// Version 1
bool dfs(string s, string t) {
if( s == t ) return true;
for(int i = 0; i < int(G[s].size()); i++) {
if( dfs( G[s][i], t ) ) return true;
}
return false;
}
// Version 2
bool dfs(string s, string t) {
if( s == t ) return true;
for(auto r: G[s]) {
if( dfs( r, t ) ) return true;
}
return false;
}
特别是版本1获得了TLE的评估,而版本2顺利通过了。根据{{3}},奇怪的是版本1的运行速度较慢,而在具有最大测试用例的PC上进行测试却得到了相同的执行时间……您能帮我吗?
答案 0 :(得分:0)
在第一个版本中,您在in循环中具有int(G [s] .size()),该循环针对循环的每次迭代在变量上调用size函数。尝试在for循环之前创建一个变量,该变量一次评估该size函数,并将其用于循环中的比较。这将比您当前拥有的版本1快。