problemscpp
A collection of my answers to algorithm problems in c++.
函数
pat::a::a1021 命名空间参考

1021 Deepest Root 更多...

函数

int dfs (const vector< unordered_set< int > > &g, int father, int nd)
 
int dfs (int father, int nd)
 
int main (istream &cin, ostream &cout)
 
 TEST (a1021, case1)
 
 TEST (a1021, case2)
 
 TEST (a1021, case3)
 

详细描述

1021 Deepest Root

函数说明

◆ dfs() [1/2]

int pat::a::a1021::dfs ( const vector< unordered_set< int > > &  g,
int  father,
int  nd 
)

在文件 pat.cpp5022 行定义.

5022 {
5023 int maximum = 0;
5024 for(const auto child: g[nd]) {
5025 if(child != father) {
5026 maximum = max(maximum, dfs(g, nd, child));
5027 }
5028 }
5029 return maximum + 1;
5030 }
int dfs(const vector< unordered_set< int > > &g, int father, int nd)
Definition: pat.cpp:5022

引用了 dfs().

被这些函数引用 dfs() , 以及 main().

◆ dfs() [2/2]

int pat::a::a1021::dfs ( int  father,
int  nd 
)

◆ main()

int pat::a::a1021::main ( istream &  cin,
ostream &  cout 
)

在文件 pat.cpp5032 行定义.

5032 {
5033 int n;
5034 cin >> n;
5035 auto g = vector<unordered_set<int>>(n + 1);
5036 vector deep(n + 1, 0);
5037 UnionFind uf(n + 1);
5038 for(int i = 1; i < n; i++) {
5039 int a, b;
5040 cin >> a >> b;
5041 uf.unite(a, b);
5042 g[a].insert(b);
5043 g[b].insert(a);
5044 }
5045 unordered_set<int> us;
5046 for(int i = 1; i <= n; i++) {
5047 us.insert(uf.find(i));
5048 }
5049 if(us.size() != 1) {
5050 cout << "Error: " << us.size() << " components";
5051 return 0;
5052 }
5053 int maximum = 0;
5054 for(int i = 1; i <= n; i++) {
5055 deep[i] = dfs(g, 0, i);
5056 maximum = max(maximum, deep[i]);
5057 }
5058 for(int i = 1; i <= n; i++) {
5059 if(deep[i] == maximum) {
5060 cout << i << endl;
5061 }
5062 }
5063 return 0;
5064 }
并查集
Definition: templates.h:91

引用了 dfs(), UnionFind::find() , 以及 UnionFind::unite().

被这些函数引用 TEST().

◆ TEST() [1/3]

pat::a::a1021::TEST ( a1021  ,
case1   
)

在文件 pat_test.cpp2259 行定义.

2259 {
2260 istringstream in("5\n"
2261 "1 2\n"
2262 "1 3\n"
2263 "1 4\n"
2264 "2 5");
2265 auto out = ostringstream();
2266 main(in, out);
2267 ASSERT_EQ("3\n"
2268 "4\n"
2269 "5\n",
2270 out.str());
2271 }
int main(int argc, char **argv)
Definition: main.cpp:5

引用了 main().

◆ TEST() [2/3]

pat::a::a1021::TEST ( a1021  ,
case2   
)

在文件 pat_test.cpp2273 行定义.

2273 {
2274 istringstream in("5\n"
2275 "1 3\n"
2276 "1 4\n"
2277 "2 5\n"
2278 "3 4");
2279 auto out = ostringstream();
2280 main(in, out);
2281 ASSERT_EQ("Error: 2 components", out.str());
2282 }

引用了 main().

◆ TEST() [3/3]

pat::a::a1021::TEST ( a1021  ,
case3   
)

在文件 pat_test.cpp2284 行定义.

2284 {
2285 istringstream in("10\n"
2286 "1 2\n"
2287 "1 3\n"
2288 "3 4\n"
2289 "1 5\n"
2290 "5 6\n"
2291 "5 7\n"
2292 "2 8\n"
2293 "7 9\n"
2294 "6 10");
2295 auto out = ostringstream();
2296 main(in, out);
2297 ASSERT_EQ("4\n"
2298 "8\n"
2299 "9\n"
2300 "10\n",
2301 out.str());
2302 }

引用了 main().