赞
踩
dfs给两集合涂色
- #include <bits/stdc++.h>
- using namespace std;
- typedef long long ll;
- const int N=1e6+7,inf=0x3f3f3f3f;
- int n,head[N],cnt,col[N];
- struct nn{
- int v,nex;
- }e[N<<1];
- void adde(int x,int y){e[++cnt]={y,head[x]};head[x]=cnt;}
- void dfs(int u ,int fa){//2个集合涂色
- if(!col[u])col[u]=1;
- for(int i=head[u];i;i=e[i].nex){
- int v=e[i].v;
- if(v==fa)continue;
- col[v]=(col[u]==1)?-1:1;
- dfs(v,u);
- }
- }
- int main () {
- int x,y;
- scanf("%d",&n);
- for(int i=1;i<n;i++){
- scanf("%d%d",&x,&y);
- adde(x,y);
- adde(y,x);
- }
- dfs(1,0);
- x=0;y=0;
- for(int i=1;i<=n;i++){
- if(col[i]==1)x++;
- else y++;
- }
- ll ans=1LL*x*y-(n-1);
- printf("%lld\n",ans);
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。