codeforces 229C Triangles

[題目鏈接]http://codeforces.com/problemset/problem/229/C

[trans]

給定n個節點的完全圖,從中選出m條邊構成圖A,剩餘邊構成圖B,詢問圖a和圖b中的三角形個數

[sol]

完全圖中的三角形個數爲C(n,3),這些三角形一部分被破壞掉,其餘的則形成了圖A和圖B的三角形,問題等價

於詢問破壞掉多少三角形,我們把選出的邊成爲藍邊,沒選的邊稱爲白邊,那麼破壞的三角形是由藍邊和白

邊共同組成的,即計算有藍邊和白邊組成的三角形個數。

計算三角形個數可以從兩個角度出發,邊和點。對於邊,損壞的三角形由藍藍白或藍白白組成,提供的特徵

沒什麼明朗的思路,對於點來說,每個損壞三角形由兩個點連接的一條藍邊和一條白邊,另外一點連接的相

同顏色的邊,那麼加入一點有k個藍邊,那麼一定有(n - 1 -k)條白邊,這樣就可以形成k * (n-1-k)個損壞

三角形,不必在意第三條邊的顏色,ans算了2遍,所以損壞三角形的個數∑ki*(n-1-ki)

#include<cstdio>
#include<iostream>
#include<cstring>
typedef long long ll;
using namespace std;
int f[1000000 + 5];
int main()
{
    int n, m;
    scanf("%d%d", &n, &m);
    for (int i = 0; i < m; i++)
    {
        int x, y;
        scanf("%d%d", &x, &y);
        f[x] ++;
        f[y]++;
    }
    ll ans = 0;
    for(int i = 1; i <= n; i++)
       ans += 1LL* f[i] * (n - 1 -f[i]);
    ans /= 2;
    ans = 1LL * n * (n - 1) * (n - 2) / 6 - ans;
    cout<<ans;
    return 0;
}
發佈了47 篇原創文章 · 獲贊 26 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章