样例已过0pts求调qwq
查看原帖
样例已过0pts求调qwq
747369
CooooldWind_楼主2023/8/4 12:07
#include<bits/stdc++.h>
using namespace std;
const int N = 2010,MAX = 0x3f3f3f3f;
int n,m,a,b;
double edge[N][N],dist[N];//权重是B实际到账和A转出的比
bool chk[N];
void dijkstra(){
    for(int i = 2;i <= n;i++){
        int minV = MAX,used = 0;
        for(int j = 1;j <= n;j++){
            if(!chk[j] && dist[j] < minV){
                minV = dist[j];
                used = j;
            }
        }
        chk[used] = true;
        for(int j = 1;j <= n;j++){
            if(edge[used][j] < MAX){
                //扣除之后剩余部分的比例应当尽可能大
                dist[j] = max(dist[j],dist[used] * edge[used][j]);
            }
        }
    }
    return;
}
int main(){
    memset(edge,0x3f,sizeof(edge));
    cin >> n >> m;
    for(int i = 1,x,y;i <= m;i++){
        double z;
        cin >> x >> y >> z;
        edge[x][y] = (100 - z) / 100.0;
        edge[y][x] = (100 - z) / 100.0;
    }
    cin >> a >> b;
    chk[a] = true;
    for(int i = 1;i <= n;i++){
        dist[i] = edge[a][i];
    }
    dist[a] = 1.00;
    dijkstra();
    printf("%.8lf",100.0 / dist[b]);
    return 0;
}

(这wa跟我用邻接矩阵没关系吧doge)

2023/8/4 12:07
加载中...