Pagini recente » Cod sursa (job #1676682) | Cod sursa (job #1790245) | Cod sursa (job #1318434) | Cod sursa (job #1066127) | Cod sursa (job #2343637)
#include <iostream>
#include <fstream>
#include <vector>
#include <climits>
#define LIM 7505
std::ifstream f ("darb.in");
std::ofstream g ("darb.out");
using namespace std;
int n, m;
vector<int>graf[LIM];
bool viz[LIM];
int distante[LIM];
const short start = 1;
void read();
void dfs(int nod);
void print (int v[], int n);
void printBool(bool v[], int n);
pair<int, int>nrMaxime(int v[], int n);
int main() {
read();
distante[start] = 1;
dfs(start);
g<<nrMaxime(distante, n).first + nrMaxime(distante, n).second - 1;
return 0;
}
void read() {
f>>n;
for (int i=1;i<=n;++i) {
pair<int, int>el;
f>>el.first>>el.second;
graf[el.first].push_back(el.second);
graf[el.second].push_back(el.first);
}
}
void dfs(int nod) {
viz[nod] = true;
int nrVecini = graf[nod].size();
for (int i=0;i<nrVecini;++i) {
int nodUrm = graf[nod][i];
if (viz[nodUrm] == false) {
distante[nodUrm] = distante[nod] + 1;
dfs(nodUrm);
}
}
}
pair<int, int>nrMaxime(int v[], int n) {
pair<int, int>maxime;
maxime.first = maxime.second = INT_MIN;
for (int i=1;i<=n;++i) {
if (v[i] > maxime.first) {
maxime.first = v[i];
}else if (v[i] > maxime.second) {
maxime.second = v[i];
}
}
return maxime;
}
void print(int v[], int n) {
for (int i=1;i<=n;++i)
g<<v[i]<<' ';
g<<'\n';
}
void printBool(bool v[], int n) {
for (int i=1;i<=n;++i)
g<<v[i]<<' ';
g<<'\n';
}