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;
    }
    
  • 相关阅读:
    MySQL创建用户并修改权限
    Jenkins触发项目构建
    dotnet-cnblogs-tool使用与坑
    Jenkins集成Jmeter接口测试(Freestyle Project)
    Jenkins发送邮件没有解析变量
    JMeter + Maven in Jenkins
    Charles&Fiddler 对手机捉包失败原因分析
    Postman 脚本
    Selenium+Chrome浏览器自动加载Flash
    idea上进行远程调试项目步骤纪录
  • 原文地址:https://www.cnblogs.com/For-Miku/p/15521306.html
Copyright © 2011-2022 走看看