#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
typedef struct adjNode {
int v;
struct adjNode *next;
}adjNode;
adjNode **Adj;
typedef struct vInfo {
int visited;
int parent;
int set;
}vInfo;
vInfo *Info;
int n;
int visited = 0;
long long setN[2] = { 1, 0 };
void dfs(int u);
void insertEdge(int v1, int v2);
void initInfo();
int main(void) {
Adj
= calloc((n
+ 1), sizeof(struct adjNode
*)); Info
= malloc((n
+ 1) * sizeof(struct vInfo
));
initInfo();
int v1, v2;
for (size_t i = 1; i < n; i++)
{
scanf("%d %d", &v1
, &v2
); insertEdge(v1, v2);
}
dfs(1);
finish();
}
void dfs(int u) {
Info[u].visited = 1;
visited++;
for (adjNode *vAdj = Adj[u]; vAdj != NULL; vAdj = vAdj->next)
{
if (!Info[vAdj->v].visited)
{
Info[vAdj->v].parent = u;
Info[vAdj->v].set = 1 - Info[u].set;
setN[Info[vAdj->v].set]++;
dfs(vAdj->v);
if (visited == n)
{
finish();
}
}
}
}
void insertEdge(int v1, int v2) {
adjNode
*v1v2
= malloc(sizeof(struct adjNode
)); v1v2->next = NULL;
v1v2->v = v2;
adjNode
*v2v1
= malloc(sizeof(struct adjNode
)); v2v1->next = NULL;
v2v1->v = v1;
adjNode *iter;
if (Adj[v1] == NULL)
Adj[v1] = v1v2;
else {
for (iter = Adj[v1]; iter->next != NULL; iter = iter->next);
iter->next = v1v2;
}
if (Adj[v2] == NULL)
Adj[v2] = v2v1;
else {
for (iter = Adj[v2]; iter->next != NULL; iter = iter->next);
iter->next = v2v1;
}
}
void initInfo() {
for (size_t i = 1; i <= n; i++)
{
Info[i].visited = 0;
Info[i].parent = -1;
Info[i].set = 0;
}
}
void finish() {
printf("%lld", setN
[0] * setN
[1] - (n
- 1)); }
I2RlZmluZSBfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUwoKI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCnR5cGVkZWYgc3RydWN0IGFkak5vZGUgewoJaW50IHY7CglzdHJ1Y3QgYWRqTm9kZSAqbmV4dDsKfWFkak5vZGU7CgphZGpOb2RlICoqQWRqOwoKdHlwZWRlZiBzdHJ1Y3QgdkluZm8gewoJaW50IHZpc2l0ZWQ7CglpbnQgcGFyZW50OwoJaW50IHNldDsKfXZJbmZvOwoKdkluZm8gKkluZm87CmludCBuOwppbnQgdmlzaXRlZCA9IDA7CmxvbmcgbG9uZyBzZXROWzJdID0geyAxLCAwIH07Cgp2b2lkIGRmcyhpbnQgdSk7CnZvaWQgaW5zZXJ0RWRnZShpbnQgdjEsIGludCB2Mik7CnZvaWQgaW5pdEluZm8oKTsKCmludCBtYWluKHZvaWQpIHsKCXNjYW5mKCIlZCIsICZuKTsKCUFkaiA9IGNhbGxvYygobiArIDEpLCBzaXplb2Yoc3RydWN0IGFkak5vZGUgKikpOwoJSW5mbyA9IG1hbGxvYygobiArIDEpICogc2l6ZW9mKHN0cnVjdCB2SW5mbykpOwoKCWluaXRJbmZvKCk7CglpbnQgdjEsIHYyOwoJZm9yIChzaXplX3QgaSA9IDE7IGkgPCBuOyBpKyspCgl7CgkJc2NhbmYoIiVkICVkIiwgJnYxLCAmdjIpOwoJCWluc2VydEVkZ2UodjEsIHYyKTsKCX0KCglkZnMoMSk7CglmaW5pc2goKTsKfQoKdm9pZCBkZnMoaW50IHUpIHsKCUluZm9bdV0udmlzaXRlZCA9IDE7Cgl2aXNpdGVkKys7CgoJZm9yIChhZGpOb2RlICp2QWRqID0gQWRqW3VdOyB2QWRqICE9IE5VTEw7IHZBZGogPSB2QWRqLT5uZXh0KQoJewoJCWlmICghSW5mb1t2QWRqLT52XS52aXNpdGVkKQoJCXsKCQkJSW5mb1t2QWRqLT52XS5wYXJlbnQgPSB1OwoJCQlJbmZvW3ZBZGotPnZdLnNldCA9IDEgLSBJbmZvW3VdLnNldDsKCQkJc2V0TltJbmZvW3ZBZGotPnZdLnNldF0rKzsKCQkJZGZzKHZBZGotPnYpOwoJCQlpZiAodmlzaXRlZCA9PSBuKQoJCQl7CgkJCQlmaW5pc2goKTsKCQkJfQoJCX0KCX0KfQoKdm9pZCBpbnNlcnRFZGdlKGludCB2MSwgaW50IHYyKSB7CglhZGpOb2RlICp2MXYyID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgYWRqTm9kZSkpOwoJdjF2Mi0+bmV4dCA9IE5VTEw7Cgl2MXYyLT52ID0gdjI7CglhZGpOb2RlICp2MnYxID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgYWRqTm9kZSkpOwoJdjJ2MS0+bmV4dCA9IE5VTEw7Cgl2MnYxLT52ID0gdjE7CgoJYWRqTm9kZSAqaXRlcjsKCWlmIChBZGpbdjFdID09IE5VTEwpCgkJQWRqW3YxXSA9IHYxdjI7CgllbHNlIHsKCQlmb3IgKGl0ZXIgPSBBZGpbdjFdOyBpdGVyLT5uZXh0ICE9IE5VTEw7IGl0ZXIgPSBpdGVyLT5uZXh0KTsKCQlpdGVyLT5uZXh0ID0gdjF2MjsKCX0KCglpZiAoQWRqW3YyXSA9PSBOVUxMKQoJCUFkalt2Ml0gPSB2MnYxOwoJZWxzZSB7CgkJZm9yIChpdGVyID0gQWRqW3YyXTsgaXRlci0+bmV4dCAhPSBOVUxMOyBpdGVyID0gaXRlci0+bmV4dCk7CgkJaXRlci0+bmV4dCA9IHYydjE7Cgl9Cn0KCnZvaWQgaW5pdEluZm8oKSB7Cglmb3IgKHNpemVfdCBpID0gMTsgaSA8PSBuOyBpKyspCgl7CgkJSW5mb1tpXS52aXNpdGVkID0gMDsKCQlJbmZvW2ldLnBhcmVudCA9IC0xOwoJCUluZm9baV0uc2V0ID0gMDsKCX0KfQoKdm9pZCBmaW5pc2goKSB7CglwcmludGYoIiVsbGQiLCBzZXROWzBdICogc2V0TlsxXSAtIChuIC0gMSkpOwoJZXhpdCgwKTsKfQ==