首页 > 代码库 > ZOJ 2316 Matrix Multiplication
ZOJ 2316 Matrix Multiplication
Matrix Multiplication
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
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 long14 #define pii pair<int,int>15 #define INF 0x3f3f3f3f16 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\n",ans);35 if(t) puts("");36 }37 return 0;38 }
ZOJ 2316 Matrix Multiplication