zoukankan      html  css  js  c++  java
  • ZOJ 2316 Matrix Multiplication

    Matrix Multiplication

    Time Limit: 2000ms
    Memory Limit: 32768KB
    This problem will be judged on ZJU. Original ID: 2316
    64-bit integer IO format: %lld      Java class name: Main
     

    Let us consider undirected graph G = <v, e="">which has N vertices and M edges. Incidence matrix of this graph is N * M matrix A = {aij}, such that aij is 1 if i-th vertex is one of the ends of j-th edge and 0 in the other case. Your task is to find the sum of all elements of the matrix ATA.


    This problem contains multiple test cases!

    The first line of a multiple input is an integer N, then a blank line followed by N input blocks. Each input block is in the format indicated in the problem description. There is a blank line between input blocks.

    The output format consists of N output blocks. There is a blank line between output blocks.


    Input

    The first line of the input file contains two integer numbers - N and M (2 <= N <= 10 000, 1 <= M <= 100 000). 2M integer numbers follow, forming M pairs, each pair describes one edge of the graph. All edges are different and there are no loops (i.e. edge ends are distinct).


    Output

    Output the only number - the sum requested.


    Sample Input

    1

    4 4
    1 2
    1 3
    2 3
    2 4


    Sample Output

    18


     

    Source

     
    解题:题意转化后,就是计算途中有多少条,长度为2的路径。注意是无向图。。。。每个顶点,看它的度是多少。从这些度里面选取2个的组合数。。。。。。
     
     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <cmath>
     5 #include <algorithm>
     6 #include <climits>
     7 #include <vector>
     8 #include <queue>
     9 #include <cstdlib>
    10 #include <string>
    11 #include <set>
    12 #include <stack>
    13 #define LL long long
    14 #define pii pair<int,int>
    15 #define INF 0x3f3f3f3f
    16 using namespace std;
    17 const int maxn = 10010;
    18 int d[maxn];
    19 int main() {
    20     int t,u,v,n,m,ans;
    21     scanf("%d",&t);
    22     while(t--){
    23         scanf("%d %d",&n,&m);
    24         memset(d,0,sizeof(d));
    25         for(int i = 0; i < m; i++){
    26             scanf("%d %d",&u,&v);
    27             ++d[u];
    28             ++d[v];
    29         }
    30         ans = 0;
    31         for(int i = 1; i <= n; i++)
    32             ans += d[i]*(d[i]-1)/2;
    33         ans = (ans + m)<<1;
    34         printf("%d
    ",ans);
    35         if(t) puts("");
    36     }
    37     return 0;
    38 }
    View Code
  • 相关阅读:
    ipandao markdown mathjax版本
    我们是不是太关注于语法而忽略了算法
    SVGG.JS 入门教程
    关于ipandao编辑器手机访问换行问题
    启明星采购系统新版发布
    仿MSDN的帮助系统
    十分钟打造一款在线的数学公式编辑器
    Search Filter Syntax
    从华为养猪说起,聊聊我对中国计算机发展的一个遗憾-为何我们没有开发出自己的编程语言
    从.NET看微软的焦虑
  • 原文地址:https://www.cnblogs.com/crackpotisback/p/4000617.html
Copyright © 2011-2022 走看看