Guest User

Untitled

a guest
Dec 15th, 2018
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.70 KB | None | 0 0
  1. #include <iostream>
  2. #include <stdio.h>
  3. #include <vector>
  4. #include <queue>
  5. #include <cstring>
  6. using namespace std;
  7. int n, m, from, to, tmp;
  8. vector<pair<int, int>> v[100001];
  9. bool visited[100001];
  10. bool dfs(int node, int mid) {
  11. if (visited[node]) //이미 방문한적있으면 false return함
  12. return false;
  13. visited[node] = true;
  14. if (node == to)//도착점에 도착하면 true return함
  15. return true;
  16. for (int i = 0; i < v[node].size(); i++) {
  17. int next = v[node][i].first;
  18. int cost = v[node][i].second;
  19. if (cost >= mid) {
  20. if (dfs(next, mid)) { // 계속 dfs타고 들어가서
  21. return true;
  22. }
  23. }
  24. }
  25. return false; //끝까지 도착점 도착 못하면 ㅂㅂ
  26. }
  27. bool bfs(int mid) {
  28. queue<int> q;
  29.  
  30. q.push(from);
  31. visited[from] = true;
  32. while (!q.empty()) {
  33. int x = q.front();
  34. if (x == to) //섬에 도착
  35. return true; //끝내기
  36. q.pop();
  37.  
  38. for (int i = 0; i < v[x].size(); i++) {
  39. int next = v[x][i].first;
  40. int weight = v[x][i].second;
  41. if (visited[next] == 0 && weight >= mid) {
  42. q.push(next);
  43. visited[next] = true;
  44. }
  45. }
  46. }
  47. return false;
  48. }
  49. int main() {
  50. scanf("%d %d", &n, &m);
  51. int left = 1, right = 0;
  52. for (int i = 0; i < m; i++) {
  53. scanf("%d %d %d", &from, &to, &tmp);
  54. v[from].push_back(make_pair(to, tmp));
  55. v[to].push_back(make_pair(from, tmp));
  56. if (right < tmp) {
  57. right = tmp;
  58. }
  59. }
  60. scanf("%d %d", &from, &to);
  61. int mid, ans = 0;
  62. while (left <= right) {
  63. memset(visited, false, sizeof(visited));
  64. mid = left - (left - right) / 2;
  65.  
  66. /*bfs일 경우
  67. if (bfs(mid)) {
  68. left = mid + 1;
  69. ans = mid;
  70. }
  71. */
  72. //dfs일 경우
  73. if (dfs(from, mid)) {
  74. left = mid + 1;
  75. ans = mid;
  76. }
  77. else {
  78. right = mid - 1;
  79. }
  80.  
  81. }
  82. printf("%d\n", ans);
  83.  
  84. return 0;
  85. }
Add Comment
Please, Sign In to add comment