Advertisement
Guest User

Untitled

a guest
Feb 20th, 2018
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.94 KB | None | 0 0
  1. #include <cstdio>
  2. #include <vector>
  3. #include <queue>
  4. using namespace::std;
  5.  
  6. const int N = 200005;
  7.  
  8. struct edge {
  9. int a, b, waga;
  10. bool operator<(const edge& v) const {
  11. return waga > v.waga;
  12. }
  13. };
  14. int n, m, w, r[N], pre[N], czas, ile = 1;
  15. bool o[N];
  16. vector<edge> t[N], wej;
  17. vector<pair<int, int> > d[N];
  18. priority_queue<edge> q;
  19.  
  20. void dfs(int v, int p) {
  21. czas++;
  22. pre[v] = czas;
  23. r[v] = 1;
  24. for (int i = 0; i < d[v].size(); i++)
  25. if (d[v][i].first != p) {
  26. dfs(d[v][i].first, v);
  27. r[v] += r[d[v][i].first];
  28. }
  29. }
  30.  
  31. bool przodek(int p, int v) {
  32. return pre[p] <= pre[v] && pre[v] < pre[p] + r[p];
  33. }
  34.  
  35. int main() {
  36. scanf("%d%d", &n, &m);
  37. for (int i = 0; i < m; i++) {
  38. int a, b, c;
  39. scanf("%d%d%d", &a, &b, &c);
  40. t[a].push_back({a, b, c});
  41. t[b].push_back({b, a, c});
  42. }
  43. for (int i = 0; i < t[1].size(); i++) q.push(t[1][i]);
  44. o[1] = true;
  45. printf("\n");
  46. while (ile < n) {
  47. int v = q.top().b;
  48. int pop = q.top().a;
  49. int waga = q.top().waga;
  50. q.pop();
  51. if (!o[v]) {
  52. wej.push_back({v, pop, waga});
  53. for (int i = 0; i < t[v].size(); i++)
  54. if (!o[t[v][i].b]) q.push(t[v][i]);
  55. w += waga;
  56. o[v] = true;
  57. ile++;
  58. }
  59. }
  60. for (int i = 0; i < wej.size(); i++) {
  61. //printf("%d, %d | %d\n", wej[i].b, wej[i].a, wej[i].waga);
  62. int a = wej[i].a;
  63. int b = wej[i].b;
  64. int waga = wej[i].waga;
  65. d[a].push_back({b, waga});
  66. d[b].push_back({a, waga});
  67. }
  68. dfs(1, 0);
  69. printf("%d", przodek(3, 3));
  70. for (int i = 1; i <= n; i++) {
  71. /*printf("%d: ", i);
  72. for (int j = 0; j < d[i].size(); j++) {
  73. printf("%d, ", d[i][j].first);
  74. }*/
  75. //printf("%d: %d, %d\n", i, pre[i], r[i]);
  76. }
  77. //printf("%d", w);
  78. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement