zoukankan      html  css  js  c++  java
  • CF1060E Sergey and Subway

    Jisoo

    通常来讲这种题可以按照边来考虑

    当然也可以按照点对。

    对于任意一个点对,在新图上的距离是在原图上的一半上取整,这样,我们可以先把原来的距离都求出来,奇数点和偶数点求出来并且化简一波式子。

    #include<cstdio>
    #include<iostream>
    #include<cstring>
    #include<iomanip>
    #include<cmath>
    #include<vector>
    #include<stack>
    #include<algorithm>
    #define int long long
    using namespace std;
    template<class T>inline void read(T &x)
    {
        x=0;register char c=getchar();register bool f=0;
        while(!isdigit(c))f^=c=='-',c=getchar();
        while(isdigit(c))x=(x<<3)+(x<<1)+(c^48),c=getchar();
        if(f)x=-x;
    }
    template<class T>inline void print(T x)
    {
        if(x<0)putchar('-'),x=-x;
        if(x>9)print(x/10);
        putchar('0'+x%10);
    }
    int n;
    int x,y;
    vector<int> v[200001];
    int siz[200001];
    int tot;
    int ans;
    int dep[2000001];
    int cnt[2];
    void dfs(int no,int f){
    	dep[no]=dep[f]+1;
    	cnt[dep[no]%2]++;
    	siz[no]++;
    	for(auto x=v[no].begin();x!=v[no].end();++x){
    		if((*x)==f) continue;
    		dfs(*x,no);
    		siz[no]+=siz[*x];
    	}
    	return ;
    }
    signed main(){
    	read(n);
    	for(int i=1;i<n;++i){
    		read(x);read(y);
    		v[x].push_back(y);
    		v[y].push_back(x);
    	}
    	dfs(1,0);
    	for(int i=1;i<=n;++i){
    		for(auto j=v[i].begin();j!=v[i].end();++j){
    				if(dep[(*j)]>dep[i]){
    				ans+=siz[*j]*(n-siz[*j]);
    				//cout<<" "<<i<<" "<<(*j)<<endl;
    				}
    		}
    	}
    	ans+=cnt[0]*cnt[1];
    	cout<<ans/2;
    	return 0;
    }
    
  • 相关阅读:
    关于用Max导出Unity3D使用的FBX文件流程注解
    EffectManager
    Python Socket API 笔记
    UIScreenAdaptive
    CentOS 5 全功能WWW服务器搭建全教程 V3.0
    CentOS 6.4 图文安装教程(有些设置大部分教程没出现过)
    Django---分页器、中间件
    Django-form表单
    Django-认证系统
    Django——model基础
  • 原文地址:https://www.cnblogs.com/For-Miku/p/15521306.html
Copyright © 2011-2022 走看看