zoukankan      html  css  js  c++  java
  • 【codeforces 229C】Triangles

    【题目链接】:http://codeforces.com/problemset/problem/229/C

    【题意】

    给你一张完全图;
    然后1个人从中选择m条边;
    然后另外一个人从中选择剩余的n*(n-1)/2-m条边;
    在这两个人分别选出的两张图中;
    问你构成的长度为3的环的个数;

    【题解】

    先考虑完全图;
    完全图中长度为3的环的个数为
    C(n,3)
    然后再考虑“分割”的这一过程毁掉了多少个环;
    考虑A图中的某个点x;
    假设它的度数为du[x];
    则B图中对应的点x
    它的度数应该为n-1-du[x];
    (完全图中,每个点的度数都为n-1)
    这样;
    我们就能找到;
    以x为一个点的,长度为3的环;被破坏的个数;
    ->du[x]*(n-1-du[x]);
    即在x这个位置发出两条边(两张不同的图上);
    假设出度分别为y和z
    则肯定有边能够把y和z连在一起的;(完全图);
    然后因为这两条边在不同的图上;
    所以肯定是被破坏掉的一个环;
    把所有的点被破坏的环的个数累加起来就好;
    这里还需要注意一点吧.
    就是上面说到的y和z;
    必然有一个点我们会重复枚举到;
    (但枚举的时候其实还是对应的这个x-y-z,也即重复了);
    所以需要除2处理;
    因为x,y,z不可能全部都在同一个图上(不然就不是被破坏的环了);
    (对应{x},{y,z}或者是{x,y}{z},{x,z}{y},但无论如何都会重复枚举到这个已经算过的环,且只会多算一次);
    所以只需要除2就好;
    (不用scanf会超。)

    【Number Of WA

    1

    【完整代码】

    #include <bits/stdc++.h>
    using namespace std;
    #define lson l,m,rt<<1
    #define rson m+1,r,rt<<1|1
    #define LL long long
    #define rep1(i,a,b) for (int i = a;i <= b;i++)
    #define rep2(i,a,b) for (int i = a;i >= b;i--)
    #define mp make_pair
    #define pb push_back
    #define fi first
    #define se second
    #define ms(x,y) memset(x,y,sizeof x)
    #define Open() freopen("F:\rush.txt","r",stdin)
    #define Close() ios::sync_with_stdio(0),cin.tie(0)
    
    typedef pair<int,int> pii;
    typedef pair<LL,LL> pll;
    
    const int dx[9] = {0,1,-1,0,0,-1,-1,1,1};
    const int dy[9] = {0,0,0,-1,1,-1,1,-1,1};
    const double pi = acos(-1.0);
    const int N = 1e6+100;
    
    int n,m,x,y;
    LL du[N],temp,ans;
    
    int main(){
        //Open();
        //Close();//scanf,puts,printf not use
        //init??????
        scanf("%d%d",&n,&m);
        rep1(i,1,m){
            scanf("%d%d",&x,&y);
            du[x]++,du[y]++;
        }
        rep1(i,1,n){
            temp = temp + du[i]*(n-1-du[i]);
        }
        ans = 1LL*n*(n-1)*(n-2)/6 - temp/2;
        printf("%I64d
    ",ans);
        return 0;
    }
  • 相关阅读:
    eclipse中常用快捷键
    js sort排序
    js parseInt函数
    Jquery常用方法
    jquery的call()和apply()方法
    Jquery中的事件命名机制
    CSS层叠样式表
    推荐博客园中好的博客主
    页面刷新或者子窗体刷新父窗体,不提示 "重试或取消”对话框
    FullCalendar日历插件使用说明
  • 原文地址:https://www.cnblogs.com/AWCXV/p/7626284.html
Copyright © 2011-2022 走看看