zoukankan      html  css  js  c++  java
  • Codeforces Round #142 (Div. 1) C. Triangles

    Codeforces Round #142 (Div. 1)

    C. Triangles

    题目链接

    今天校内选拔赛出了这个题,没做出来....自己思维能力还不够强吧。我题也给读错了。。
    每次拆掉一条边,可以考虑在原图中会破坏多少三角形,但这也不好统计;所以可以转化一下,在新图中是什么样子的。
    原图中会破坏三角形的话,那么在新图中,那些没有被(a,b)两个点连接的点的个数就应当是破坏的个数。这个好统计,就是(n-du[a]-du[b]+)(a,b)同时相连的点的数量。这个容斥一下就出来了。
    在新图中新增的三角形的数量就直接是:与(a,b)同时相连的点的数量。
    最后求和,那么后面的这个就被抵消了。答案就很好计算了。细节见代码吧:

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int N = 1e6 + 5;
    ll n, m;
    int d[N] ;
    int main() {
        ios::sync_with_stdio(false); cin.tie(0);
        cin >> n >> m;
        ll ans = 1ll * n * (n - 1) * (n - 2) / 6;
        for(int i = 1; i <= m; i++) {
            int u, v;
            cin >> u >> v;
            ans -= n - (++d[u]) - (++d[v]) ;
        }
        cout << ans ;
        return 0;
    }
    

    自己思维能力还是不够强,还需要多练习才行。

  • 相关阅读:
    wenbao与分治
    wenbao与贪心
    wenbao与高精度
    wenbao与FFT
    wenbao与卡特兰数
    wenbao与类
    wenbao与取整函数
    wenbao与字符串转化
    wenbao与scanf
    wenbao与数字与字符串
  • 原文地址:https://www.cnblogs.com/heyuhhh/p/10883979.html
Copyright © 2011-2022 走看看