fork(2) download
  1. #include <iostream>
  2. #include<vector>
  3.  
  4. using namespace std;
  5.  
  6.  
  7. #define SIZE (100)
  8.  
  9. std::pair<int,int> longest(vector<vector<int>>& E, vector<pair<int,int>>& R, int n) {
  10. if(E[n].size() == 0)
  11. return make_pair(0,n);
  12.  
  13. if(R[n].first != -1)
  14. return R[n];
  15.  
  16. for(auto& e : E[n]) {
  17. std::pair<int,int> p = longest(E,R,e);
  18. if(p.first + 1 > R[n].first || (p.first+1==R[n].first && p.second < R[n].second)) {
  19. R[n].first = p.first+1;
  20. R[n].second=p.second;
  21. }
  22. }
  23. return R[n];
  24.  
  25. }
  26.  
  27.  
  28. int main() {
  29. int n; cin>>n;
  30. int T=0;
  31. while(n > 0) {
  32. n++;
  33. vector<vector<int>> E(n,vector<int>());
  34. vector<pair<int,int>> R(n,pair<int,int>(-1,-1));
  35. int s; cin>>s;
  36. int a,b; cin>>a>>b;
  37. while(a!=0 && b!=0) {
  38. E[a].push_back(b);
  39. cin>>a>>b;
  40. }
  41. auto p = longest(E,R,s);
  42. cout<<"Case "<<++T<<": The longest path from "<<s<<" has length "<<p.first<<", finishing at "<<p.second<<"."<<endl<<endl;
  43. cin>>n;
  44. }
  45. }
  46.  
  47.  
Success #stdin #stdout 0s 3476KB
stdin
2 
1 
1 2 
0 0 
5 
3 
1 2 
3 5 
3 1 
2 4 
4 5 
0 0 
5 
5 
5 4 
5 3 
5 2 
5 1 
4 1 
4 2 
0 0 
8 
1 
7 1 
8 1 
1 3 
2 3 
4 3 
3 5 
6 2 
0 0 
6 
1 
1 2 
1 5 
2 3 
3 4 
4 5 
5 6 
0 0 
2 
1 
1 2 
0 0
10
6
1 2
3 4
4 5
5 6
6 7
7 8
8 9
9 10
4 10
7 2
2 8
0 0
2
1
0 0
2
2
0 0
2
2
1 2
0 0
2
1
1 2
0 0
2
1
2 1
0 0
2
2
2 1
0 0
7
1
1 2
1 4
2 7
2 5
4 3
4 6
2 4
3 6
3 7
0 0
0 
stdout
Case 1: The longest path from 1 has length 1, finishing at 2.

Case 2: The longest path from 3 has length 4, finishing at 5.

Case 3: The longest path from 5 has length 2, finishing at 1.

Case 4: The longest path from 1 has length 2, finishing at 5.

Case 5: The longest path from 1 has length 5, finishing at 6.

Case 6: The longest path from 1 has length 1, finishing at 2.

Case 7: The longest path from 6 has length 5, finishing at 10.

Case 8: The longest path from 1 has length 0, finishing at 1.

Case 9: The longest path from 2 has length 0, finishing at 2.

Case 10: The longest path from 2 has length 0, finishing at 2.

Case 11: The longest path from 1 has length 1, finishing at 2.

Case 12: The longest path from 1 has length 0, finishing at 1.

Case 13: The longest path from 2 has length 1, finishing at 1.

Case 14: The longest path from 1 has length 4, finishing at 6.