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

    分两种情况讨论

    一种为奇数长为$L$的路径,在经过变化后,我们需要走$frac{L}{2} + 1$步

    一种为偶数长为$L$的路径,在变化后,我们需要走$frac{L}{2}$步

    那么,我们只需要讨论出所有奇数长的路径的个数,再加上原本的路径和,除以2就是答案了

    对于奇数长的路径的个数,一定是从奇点走到偶点

    对于路径和,考虑每条边的经过次数即可

    #include <map>
    #include <queue>
    #include <vector>
    #include <cstdio>
    #include <cstring>
    #include <iostream>
    #include <algorithm>
    namespace remoon {
        #define ri register int
        #define ll long long
        #define tpr template <typename ra>
        #define rep(iu, st, ed) for(ri iu = st; iu <= ed; iu ++)
        #define drep(iu, ed, st) for(ri iu = ed; iu >= st; iu --)    
        #define gc getchar
        inline int read() {
            int p = 0, w = 1; char c = gc();
            while(c > '9' || c < '0') { if(c == '-') w = -1; c = gc(); }
            while(c >= '0' && c <= '9') p = p * 10 + c - '0', c = gc();
            return p * w;
        }
        int wr[50], rw;
        #define pc(iw) putchar(iw)
        tpr inline void write(ra o, char c = '
    ') {
            if(!o) pc('0');
            if(o < 0) o = -o, pc('-');
            while(o) wr[++ rw] = o % 10, o /= 10;
            while(rw) pc(wr[rw --] + '0');
            pc(c);
        }
    }
    using namespace std;
    using namespace remoon;
    
    #define sid 500050
    
    ll ans;
    int n, cnp, num[2];
    int sz[sid], cap[sid], nxt[sid], node[sid];
    
    inline void addedge(int u, int v) {
        nxt[++ cnp] = cap[u]; cap[u] = cnp; node[cnp] = v;
    }
    
    #define cur node[i]
    inline void dfs(int o, int fa, int dep = 0) {
        sz[o] = 1; num[dep] ++;
        for(int i = cap[o]; i; i = nxt[i]) 
        if(cur != fa) {
            dfs(cur, o, dep ^ 1);
            sz[o] += sz[cur];
        }
        ans += 1ll * sz[o] * (n - sz[o]);
    }
    
    int main() {
        n = read();
        rep(i, 2, n) {
            int u = read(), v = read();
            addedge(u, v); addedge(v, u);
        }
        dfs(1, 0);
        ans += 1ll * num[0] * num[1];
        write(ans >> 1);
        return 0;
    }
  • 相关阅读:
    Python 编码转换与中文处理
    odoo 基本知识
    odoo xml 时间搜索条件
    在Ubuntu Kylin 16.04 LTS 上源码方式安装odoo
    安装hive
    linux中不同颜色的文件代表什么不同的类型
    PDF神器
    网盘搜索网站
    搭建Hadoop的全分布模式
    虚拟机中操作系统的克隆方法及ip修改及硬件地址修改
  • 原文地址:https://www.cnblogs.com/reverymoon/p/9825019.html
Copyright © 2011-2022 走看看