HihoCode-1675-稀疏矩阵乘积

上来先一顿暴力,结果70分就超时了。

然后意识到稀疏矩阵,有很多0,如果c[i][j] != 0,那么一定存在至少一个k满足a[i][k] != 0 && b[k][j] != 0;

然后就一发水A啦

1675 稀疏矩阵乘积 AC G++ 35ms 15MB
#include "bits/stdc++.h"
using namespace std;
typedef long long LL;
typedef pair<int, int> PII;
const int INF = 0x3f3f3f3f;
vector<PII> a[2005];
int b[2005][2005];
int main() {
    int n, p, q;
    int x, y, k;
    scanf("%d%d%d", &n, &p, &q);
    while (p--) {
        scanf("%d%d%d", &x, &y, &k);
        a[x].push_back({y, k});
    }
    while (q--) {
        scanf("%d%d%d", &x, &y, &k);
        b[x][y] = k;
    }
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= n; j++) {
            int ans = 0;
            for (PII u : a[i]) {
                if (b[u.first][j]) {
                    ans += u.second * b[u.first][j];
                }
            }
            if (ans != 0) {
                printf("%d %d %d
", i, j, ans);
            }
        }
    }
    return 0;
}
原文地址:https://www.cnblogs.com/Angel-Demon/p/10303732.html