码迷,mamicode.com
首页 > 其他好文 > 详细

CF489_D_剪枝

时间:2014-11-19 22:03:06      阅读:124      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   io   ar   color   os   sp   for   

题目链接:http://codeforces.com/problemset/problem/489/D

题意:给你一个图 让你求里面菱形的个数,菱形如下图

bubuko.com,布布扣

思路:类似于floyd,枚举点a和点c。

注意:题目里面点的个数为3000,边的个数为30000,做一个剪枝,复杂度为O(nm+(n-√m)n)。

好吧,我还是不会算复杂度。。。明天写一下vector。。。待更新~~~

 

bubuko.com,布布扣
#include<cstdio>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<algorithm>
using namespace std;

const int maxn = 3000+10;
int map[maxn][maxn];
__int64 map_[maxn][maxn];
int main() {
    //freopen("test.txt", "r", stdin);
    int n, m;
    while(scanf("%d%d", &n, &m)!=EOF) {
        int u, v;
        __int64 ans = 0;
        memset(map, 0, sizeof(map));
        memset(map_, 0, sizeof(map_));
        for(int i=1; i<=m; i++) {
            scanf("%d %d", &u, &v);
            map[u][v]++;
        }
        for(int k=1; k<=n; k++) {
            for(int i=1; i<=n; i++) {
                if(map[i][k]==0) continue;
                for(int j=1; j<=n; j++) {
                    if(map[i][k] && map[k][j] && i!=j) map_[i][j]++;
                }
            }
        }
        for(int i=1; i<=n; i++) {
            for(int j=1; j<=n; j++) {
                ans += map_[i][j]*(map_[i][j]-1)/2;
            }
        }
        printf("%I64d\n", ans);
    }
    return 0;
}
View Code

 

bubuko.com,布布扣
bubuko.com,布布扣

CF489_D_剪枝

标签:style   blog   http   io   ar   color   os   sp   for   

原文地址:http://www.cnblogs.com/sayeter/p/4109198.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!