为什么不同
  • 板块学术版
  • 楼主pengbonan
  • 当前回复2
  • 已保存回复2
  • 发布时间2024/10/20 21:27
  • 上次更新2024/10/21 01:16:13
查看原帖
为什么不同
1005693
pengbonan楼主2024/10/20 21:27

题目
这个是 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。为什么会这样?

2024/10/20 21:27
加载中...