Если я запускаю код, как показано ниже, он падает для входных данных.Но если я не использую итератор и использую код, написанный в разделе комментариев (в функции DFS()
), то он работает нормально и больше не падает.Я не могу понять, почему этот код получает сбой итератором.
#include<iostream>
#include<cstdio>
#include<vector>
#include<cstring>
#include<stack>
using namespace std;
vector<pair<int, int> > graph[30009];
vector<pair<int, int> >:: iterator it;
long long int far;
int visit[30001], last;
void DFS(int vertex, long long int edge)
{
if(edge > far){
far = edge;
last = vertex;
}
/*for(int i = 0; i < graph[vertex].size(); i++){
int node = graph[vertex][i].first;
int weight = graph[vertex][i].second;
if(visit[node] == 0){
visit[node] = 1;
DFS(node, edge+weight);
}
}*/
for(it = graph[vertex].begin(); it != graph[vertex].end(); it++){
int node = it->first;
int weight = it->second;
if(visit[node] == 0){
visit[node] = 1;
DFS(node, edge+weight);
}
}
return;
}
int main()
{
int T, n,u,v,w;
scanf("%d", &T);
for(int i = 1; i <= T; i++){
far = 0;
memset(visit, 0, sizeof(visit));
scanf("%d", &n);
for(int j = 0; j < 30001; j++)
graph[j].clear();
for(int j = 1; j < n; j++){
scanf("%d%d%d", &u, &v, &w);
graph[u].push_back(make_pair(v,w));
graph[v].push_back(make_pair(u,w));
}
visit[0] = 1;
DFS(0, 0);
memset(visit, 0, sizeof(visit));
visit[last] = 1;
DFS(last, 0);
printf("Case %d: %lld\n", i, far);
}
return 0;
}