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;
    }
    
  • 相关阅读:
    jQuery选择器总结
    ASP.NET MVC Controller向View传值的几种方式
    C# 实现屏幕截屏
    C#方法参数传递-同时使用ref和out关键字
    C#委托的异步调用
    C#导出Excel总结
    JQuery Form AjaxSubmit(options)在Asp.net中的应用注意事项
    Ubuntu16.04 Tomcat9的安装
    ubuntu16.04 安装 eclipse
    pychram最新注册码
  • 原文地址:https://www.cnblogs.com/For-Miku/p/15521306.html
Copyright © 2011-2022 走看看