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\n", i, j, ans); } } } return 0; }