• 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;
    }
    

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

  • 相关阅读:
    2020年“安洵杯”四川省大学生信息安全技术大赛 Misc WP
    整数划分问题
    二叉树根节点到叶子节点的所有路径和
    java正则表达式
    搜狗笔试
    跟谁学0923笔试
    360 笔试0926
    度小满0920
    TreeMap 常用函数
    达达0920
  • 原文地址:https://www.cnblogs.com/heyuhhh/p/10883979.html
Copyright © 2020-2023  润新知