六月集训(第27天)—图
图
1. 1514. 概率最大的路径
思路:
贪心的每次选择成功率最高的路走,每次记录到达每个点的最大成功率,返回end点的成功率即可。
class Solution {
// 要求最大的成功概率,即不能走重复的路,否则,每重复一次,乘一个小于1的数,成功率会变小
#define maxn 20020
struct EDGE {
int to;
double val;
EDGE() {}
EDGE(int _to, double _val) : to(_to), val(_val) {}
};
public:
vector<EDGE> edge[maxn];
double bfs(int start, int end) {
queue<int> Q;
Q.push(start);
double ans[maxn];
for (int i = 0; i < maxn; ++i) ans[i] = 0;
ans[start] = 1;
while (!Q.empty()) {
int now = Q.front();
Q.pop();
int now_size = edge[now].size(), i;
for (i = 0; i < now_size; ++i) {
int v = edge[now][i].to;
double w = edge[now][i].val;
double new_ans = w * ans[now];
if (new_ans > ans[v]) {
Q.push(v);
ans[v] = new_ans;
}
}
}
return ans[end];
}
double maxProbability(int n, vector<vector<int>>& edges, vector<double>& succProb, int start, int end) {
int edges_size = edges.size(), i;
for (i = 0; i < edges_size; ++i) {
int u = edges[i][0];
int v = edges[i][1];
double w = succProb[i];
edge[u].push_back(EDGE(v, w));
edge[v].push_back(EDGE(u, w));
}
return bfs(start, end);
// return ans == 1 ? 0 : ans;
}
};
东方欲晓,莫道君行早。

浙公网安备 33010602011771号