题目
这个是 AC code:
#include <iostream>
#include <vector>
#include <queue>
#include <cstring>
#include <iomanip>
#define double long double
using namespace std;
struct edge {
int v;
double w;
bool operator < (const edge& r) const {
return w < r.w;
}
};
const int N = 2000 + 10;
int n, m;
vector <edge> E[N];
double dis[N];
bool vis[N];
void Dij (int s) {
dis[s] = 1;
priority_queue <edge> q;
q.push({s, 0});
while (!q.empty()) {
edge Tp = q.top();
q.pop();
if (vis[Tp.v])
continue;
vis[Tp.v] = 1;
for (auto k : E[Tp.v]) {
if (dis[k.v] < dis[Tp.v] * (1.0 - k.w / 100.0)) {
dis[k.v] = dis[Tp.v] * (1.0 - k.w / 100.0);
q.push({k.v, dis[k.v]});
}
}
}
}
signed main () {
// ios::sync_with_stdio(false);
// cin.tie(nullptr), cout.tie(nullptr);
cin >> n >> m;
for (int i = 1; i <= m; i ++) {
int u, v, w;
cin >> u >> v >> w;
E[u].push_back({v, w});
E[v].push_back({u, w});
}
int A, B;
cin >> A >> B;
Dij(A);
double ans = 100.0 / dis[B];
cout << fixed << std::setprecision(8) << ans;
return 0;
}
这个是 WA 0pts code:
#include <iostream>
#include <vector>
#include <queue>
#include <cstring>
#include <iomanip>
#define double long double
using namespace std;
struct edge {
int v;
double w;
bool operator < (const edge& r) const {
return w < r.w;
}
};
const int N = 2000 + 10;
int n, m;
vector <edge> E[N];
double dis[N];
bool vis[N];
void Dij (int s) {
dis[s] = 1;
priority_queue <edge> q;
q.push({s, 0});
while (!q.empty()) {
edge Tp = q.top();
q.pop();
if (vis[Tp.v])
continue;
vis[Tp.v] = 1;
for (auto k : E[Tp.v]) {
if (dis[k.v] < dis[Tp.v] * (1.0 - k.w / 100.0)) {
dis[k.v] = dis[Tp.v] * (1.0 - k.w / 100.0);
q.push({k.v, dis[k.v]});
}
}
}
}
signed main () {
freopen("P1576_1.in", "r", stdin);
// ios::sync_with_stdio(false);
// cin.tie(nullptr), cout.tie(nullptr);
cin >> n >> m;
for (int i = 1; i <= m; i ++) {
int u, v, w;
cin >> u >> v >> w;
E[u].push_back({v, w});
E[v].push_back({u, w});
}
int A, B;
cin >> A >> B;
Dij(A);
double ans = 100.0 / dis[B];
cout << fixed << std::setprecision(8) << ans;
return 0;
}
其中只是把 printf 改为的 cout 就 AC 了,printf 总是输出 0。为什么会这样?