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
  • 相关阅读:
    A1052. Linked List Sorting (25)
    A1032. Sharing (25)
    A1022. Digital Library (30)
    A1071. Speech Patterns (25)
    A1054. The Dominant Color (20)
    A1060. Are They Equal (25)
    A1063. Set Similarity (25)
    电子码表
    矩阵键盘
    对象追踪、临时对象追踪、绝对坐标与相对坐标
  • 原文地址:https://www.cnblogs.com/crackpotisback/p/4000617.html
Copyright © 2011-2022 走看看