生活随笔
收集整理的這篇文章主要介紹了
代码记录-连边树
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
隊友給了一道題,不知道哪兒的,沒法驗題,先寫一版代碼占個坑,回頭驗了再改
#include<iostream>
#include<algorithm>
#include<stdio.h>
#include<string>
#include<string.h>
#include<math.h>
#define PI acos(-1)
#define max(a, b) a > b ? a : b
#define min(a, b) a < b ? a : b
#define ios ios::sync_with_stdio(false)
#define endl '\n'
#define memset(a,b) memset(a, b, sizeof a)
#define forr(i, l, r) for(int i = l; i <= r; i++)
#pragma GCC optimize(2)
typedef long long ll;
typedef long double ld;using namespace std;const int N = 2e5 + 7;
int n;
int to[2 * N], nexto[2 * N], head[N], idx;void add(int a, int b) {to[idx] = b, nexto[idx] = head[a], head[a] = idx++;to[idx] = a, nexto[idx] = head[b], head[b] = idx++;
}int dfs(int g, int d, int f) {if (nexto[head[g]] == -1 && to[head[g]] == f)return d;int res = d;for (int i = head[g]; ~i; i = nexto[i]) {int t = to[i];if (t != f)res += dfs(t, 1 - d, g);}return res;
}int ans, js[2];
void writ(int g, int f, int d) {int k = 0;for (int i = head[g]; ~i; i = nexto[i]) {k++;int t = to[i];if (t != f) writ(t, g, 1 - d);}ans += js[d] - k;
}int main() {ios;memset(head, -1);cin >> n;forr (i, 2, n) {int a, b;cin >> a >> b;add(a, b);}js[0] = dfs(1, 0, 0), js[1] = n - js[0];writ(1, 0, 0);cout << ans / 2 << endl;return 0;
}
總結
以上是生活随笔為你收集整理的代码记录-连边树的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。