为甚么我用vector存图就只有10pts,而邻接矩阵存图却过了
vector存图
#include <bits/stdc++.h>
#define int long long
using namespace std;
inline int init() {
char c;bool f(true);
while (!isdigit(c = getchar())) {
if (c == EOF) return EOF;
f = c != '-';
}
int x(c ^ 48);
while (isdigit(c = getchar())) x = x * 10 + (c ^ 48);
return f ? x : -x;
}
int n, pri[1005], d[1005], cnt[1005];
vector<pair<int, int> > g[1005];
bool vis[1005];
signed main() {
n = init();
for (int i(1); i <= n; ++i) pri[i] = init();
for (int a, b, c; ~(a = init(), b = init(), c = init()); )
++a, ++b, ++c, g[a].push_back({b, c}), g[b].push_back({a, c});
d[0] = 1e18;
for (int i(1); i <= n; ++i) d[i] = pri[i], cnt[i] = 1;
for (int i(1); i <= n; ++i) {
int mink(0);
for (int j(1); j <= n; ++j)
if (!vis[j] && d[mink] > d[j]) mink = j;
if (mink == 1) return !printf("%lld %lld", d[1], cnt[1]);
vis[mink] = 1; int len(g[mink].size());
for (int j(0); j < len; ++j) {
int t1(g[mink][j].first), t2(g[mink][j].second), t(d[mink] + d[t1]);
if (vis[t1] && !vis[t2]) {
if (d[t2] > t) d[t2] = t, cnt[t2] = cnt[t1] * cnt[mink];
else if (d[t2] == t) cnt[t2] += cnt[t1] * cnt[mink];
}
}
}
return 0;
}
邻接矩阵存图
#include <bits/stdc++.h>
#define int long long
using namespace std;
inline int init() {
char c;
while (!isdigit(c = getchar())) if (c == EOF) return EOF;
int x(c ^ 48);
while (isdigit(c = getchar())) x = x * 10 + (c ^ 48);
return x;
}
int n, d[1005], cnt[1005], g[1005][1005];
bool vis[1005];
signed main() {
n = init();
for (int i(1); i <= n; ++i) d[i] = init(), cnt[i] = 1;
for (int a, b, c; ~(a = init(), b = init(), c = init()); )
++a, ++b, ++c, g[a][b] = g[b][a] = c;
d[0] = 1e18;
for (int i(1); i <= n; ++i) {
int mink(0);
for (int j(1); j <= n; ++j)
if (!vis[j] && d[mink] > d[j]) mink = j;
if (mink == 1) return !printf("%lld %lld", d[1], cnt[1]);
vis[mink] = 1;
for (int j(1); j <= n; ++j)
if (vis[j] && g[mink][j]) {
int t(d[mink] + d[j]), &dis(d[g[mink][j]]);
if (dis == t) cnt[g[mink][j]] += cnt[mink] * cnt[j];
else if (dis > t) dis = t, cnt[g[mink][j]] = cnt[mink] * cnt[j];
}
}
return 0;
}
劳驾各位大佬了