codeforces 229C
生活随笔
收集整理的這篇文章主要介紹了
codeforces 229C
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題意:?
? ? ? ? http://codeforces.com/problemset/problem/229/C
? ? ? ? 給你一個全圖,分成兩部分,問你這兩個途中一共有多少個三角形.
思路:
? ? ? 如果是一個完整的全圖,那么三角形的個數就是 C(n中取3),那么答案就是C(n中取3)減去被破壞的三角形個數,這個題目關鍵的一點就是全圖,全圖中的每一個點的度數都是n-1,那么在其中的一個圖中的度數是 a的話,另一個圖中的度數就是 n - 1 - a,而每一個圖中點的度數就是他的邊數,想像一下吧兩個圖組合到一起的話就一定會另外形成 a * (n - 1 - a)個三角形,因為假如一個點連出去兩條邊(這兩條邊在兩個圖中),而那兩條邊又一定會被一條邊相連接(因為是全圖),就這樣根據給的圖就可以算出每一個點所在被破壞三角形的個數,需要注意一點的就是每一個破壞的三角形肯定是一條邊在一個集合,而另兩條邊在另一個集合,那么這個破壞的三角形的三個點就一定是有兩個點既在圖1中有邊,也在圖二中有邊,所以算了兩次,所以要把所有被破壞的三角形個數除以二,在用總的個數減去破壞的個數就是答案..
? ? ??
? ? ??
#include<stdio.h>
#include<string.h>
#define N ?1000000 + 1000
__int64 deg[N];
int main ()
{
? ?int n ,m ,i ,a ,b;
? ?__int64 sum ,s;
? ?while(~scanf("%d %d" ,&n ,&m))
? ?{
? ? ? memset(deg ,0 ,sizeof(deg));
? ? ? for(i = 1 ;i <= m ;i ++)
? ? ? {
? ? ? ? ?scanf("%d %d" ,&a ,&b);
? ? ? ? ?deg[a] ++ ,deg[b] ++;
? ? ? }
? ? ? __int64 nn = n;
? ? ? sum = 0; ??
? ? ? for(i = 1 ;i <= n ;i ++)
? ? ? {
? ? ? ? ?sum += deg[i] * (nn - 1 - deg[i]);
? ? ? }?
? ? ? printf("%I64d\n" ,nn * (nn - 1) * (nn - 2) / 6 - sum / 2);
? ?}
? ?return 0;
}
? ? ? ? http://codeforces.com/problemset/problem/229/C
? ? ? ? 給你一個全圖,分成兩部分,問你這兩個途中一共有多少個三角形.
思路:
? ? ? 如果是一個完整的全圖,那么三角形的個數就是 C(n中取3),那么答案就是C(n中取3)減去被破壞的三角形個數,這個題目關鍵的一點就是全圖,全圖中的每一個點的度數都是n-1,那么在其中的一個圖中的度數是 a的話,另一個圖中的度數就是 n - 1 - a,而每一個圖中點的度數就是他的邊數,想像一下吧兩個圖組合到一起的話就一定會另外形成 a * (n - 1 - a)個三角形,因為假如一個點連出去兩條邊(這兩條邊在兩個圖中),而那兩條邊又一定會被一條邊相連接(因為是全圖),就這樣根據給的圖就可以算出每一個點所在被破壞三角形的個數,需要注意一點的就是每一個破壞的三角形肯定是一條邊在一個集合,而另兩條邊在另一個集合,那么這個破壞的三角形的三個點就一定是有兩個點既在圖1中有邊,也在圖二中有邊,所以算了兩次,所以要把所有被破壞的三角形個數除以二,在用總的個數減去破壞的個數就是答案..
? ? ??
? ? ??
#include<stdio.h>
#include<string.h>
#define N ?1000000 + 1000
__int64 deg[N];
int main ()
{
? ?int n ,m ,i ,a ,b;
? ?__int64 sum ,s;
? ?while(~scanf("%d %d" ,&n ,&m))
? ?{
? ? ? memset(deg ,0 ,sizeof(deg));
? ? ? for(i = 1 ;i <= m ;i ++)
? ? ? {
? ? ? ? ?scanf("%d %d" ,&a ,&b);
? ? ? ? ?deg[a] ++ ,deg[b] ++;
? ? ? }
? ? ? __int64 nn = n;
? ? ? sum = 0; ??
? ? ? for(i = 1 ;i <= n ;i ++)
? ? ? {
? ? ? ? ?sum += deg[i] * (nn - 1 - deg[i]);
? ? ? }?
? ? ? printf("%I64d\n" ,nn * (nn - 1) * (nn - 2) / 6 - sum / 2);
? ?}
? ?return 0;
}
總結
以上是生活随笔為你收集整理的codeforces 229C的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: hdu2196 树形DP
- 下一篇: hdu4396 多状态spfa