Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cstdio>
- #include <vector>
- #include <queue>
- using namespace::std;
- const int N = 200005;
- struct edge {
- int a, b, waga;
- bool operator<(const edge& v) const {
- return waga > v.waga;
- }
- };
- int n, m, w, r[N], pre[N], czas, ile = 1;
- bool o[N];
- vector<edge> t[N], wej;
- vector<pair<int, int> > d[N];
- priority_queue<edge> q;
- void dfs(int v, int p) {
- czas++;
- pre[v] = czas;
- r[v] = 1;
- for (int i = 0; i < d[v].size(); i++)
- if (d[v][i].first != p) {
- dfs(d[v][i].first, v);
- r[v] += r[d[v][i].first];
- }
- }
- bool przodek(int p, int v) {
- return pre[p] <= pre[v] && pre[v] < pre[p] + r[p];
- }
- int main() {
- scanf("%d%d", &n, &m);
- for (int i = 0; i < m; i++) {
- int a, b, c;
- scanf("%d%d%d", &a, &b, &c);
- t[a].push_back({a, b, c});
- t[b].push_back({b, a, c});
- }
- for (int i = 0; i < t[1].size(); i++) q.push(t[1][i]);
- o[1] = true;
- printf("\n");
- while (ile < n) {
- int v = q.top().b;
- int pop = q.top().a;
- int waga = q.top().waga;
- q.pop();
- if (!o[v]) {
- wej.push_back({v, pop, waga});
- for (int i = 0; i < t[v].size(); i++)
- if (!o[t[v][i].b]) q.push(t[v][i]);
- w += waga;
- o[v] = true;
- ile++;
- }
- }
- for (int i = 0; i < wej.size(); i++) {
- //printf("%d, %d | %d\n", wej[i].b, wej[i].a, wej[i].waga);
- int a = wej[i].a;
- int b = wej[i].b;
- int waga = wej[i].waga;
- d[a].push_back({b, waga});
- d[b].push_back({a, waga});
- }
- dfs(1, 0);
- printf("%d", przodek(3, 3));
- for (int i = 1; i <= n; i++) {
- /*printf("%d: ", i);
- for (int j = 0; j < d[i].size(); j++) {
- printf("%d, ", d[i][j].first);
- }*/
- //printf("%d: %d, %d\n", i, pre[i], r[i]);
- }
- //printf("%d", w);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement