RT
挺离谱的,long long试过了不行,改了数据范围也不行
错误提示:Wrong Answer.wrong answer On line 1 column 3, read 4, expected 6.
code:
#include <bits/stdc++.h>
#define inf (1 << 31) - 1
//#define int long long
using namespace std;
const int maxn = 4e6 + 10;
const int N = 2005;
int c[N][N];
int dis[N], sum[N], n, m;
bool vis[N];
priority_queue<pair<int, int>> q;
int head[N], nxt[maxn], to[maxn], val[maxn];
int ans, cnt;
inline void add_edge(int u, int v, int w) {
to[++cnt] = v;
nxt[cnt] = head[u];
val[cnt] = w;
head[u] = cnt;
}
inline void init() {
// memset(dis, inf, sizeof dis);
for (int i = 2; i <= n; i++) {
dis[i] = inf;
}
sum[1] = 1;
q.push(make_pair(0, 1));
}
inline void dijkstra() {
while (!q.empty()) {
int x = q.top().second;
q.pop();
if (vis[x]) {
continue;
}
vis[x] = 1;
for (int i = head[x]; i != 0; i = nxt[i]) {
int y = to[i];
int z = val[i];
if (dis[y] > dis[x] + z) {
dis[y] = dis[x] + z;
sum[y] = 0;
q.push(make_pair(-dis[y], y));
}
if (dis[y] == dis[x] + z) {
sum[y] += sum[x];
}
}
}
}
signed main() {
ios::sync_with_stdio(false);
cin >> n >> m;
for (int i = 1; i <= m; i++) {
int u, v, w;
cin >> u >> v >> w;
if (!c[u][v]) {
add_edge(u, v, w);
c[u][v] = 1;
} if (c[u][v]) {
for (int i = head[u]; i != 0; i = nxt[i]) {
if (nxt[i] == v) {
val[i] = min(val[i], w);
break;
}
}
}
}
init();
dijkstra();
if (dis[n] == inf) {
cout << "No answer" << endl;
return 0;
}
cout << dis[n] << " " << sum[n] << endl;
return 0;
}
正确输出:
3 6
代码输出:
3 4