HUT_ACM #1 D Matrix Multiplication(ZOJ-2316)

来源:互联网 发布:软件图标显示异常 编辑:程序博客网 时间:2024/05/07 12:36

这道题目的意思是:N个点,M边,然后根据题意建立一个矩阵,然后让你求ATA。A的转置矩阵乘以A的矩阵,然后求得的矩阵每个元素再求和。由于矩阵是在是太大了,连储存都无法储存的,所以只能够找规律了,刚开始的时候连样例都是找不出是怎么得到的,那个急呀,要不然其实我很早就能过了这道题目的。但是听别人讲的又是一种思路,自己就是这样,有了自己的方法就不想去学别人的想法了。这怎么能行呢?先贴出自己的代码,然后再看别人的解题:

自己的代码:

#include <stdio.h>#include <string.h>#include <iostream>#include <string>using namespace std;const int MAXN = 10000 + 11;int N, M;int v[MAXN];int main(){int T;scanf("%d", &T);int first = 1;while (scanf("%d%d", &N, &M) != EOF){int a, b;memset(v, 0, sizeof(v));for (int i = 0; i < M; i++){scanf("%d%d", &a, &b);v[a]++;v[b]++;}long long ans = M * 2;for (int i = 1; i <= N; i++){if (v[i] == 1 || v[i] == 0){continue;}if (v[i] == 2){ans += 2;;}else{ans += v[i] * (v[i] - 1);}}if (!first){printf("\n");}printf("%d\n", ans);first = 0;}//system("pause");return 0;}


别人的代码: