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
Andrew Stankevich‘s Contest #1
解题:题意转化后,就是计算途中有多少条,长度为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\n",ans); 35 if(t) puts(""); 36 } 37 return 0; 38 }