蒟蒻求助一道水题
  • 板块学术版
  • 楼主chenwenda316
  • 当前回复3
  • 已保存回复3
  • 发布时间2020/8/13 21:33
  • 上次更新2023/11/6 20:22:57
查看原帖
蒟蒻求助一道水题
226621
chenwenda316楼主2020/8/13 21:33
#include <iostream>
#include <queue>
#include <vector>
using namespace std;
int inf = 2147483647;
struct edge{
    int v, w;
};
vector<edge> mp[105];
struct node{
    int v, w;
    const bool operator<(const node& n) const {
        return w > n.w;
    }
};
int n = 60;
int m;
int d[105];
int vis[105];
char itoc(int & a)
{
    if (a <= 26 && a >= 1)
        return a + 'a' - 1;
    if (a <= 52 && a >= 27)
        return a + 'A' - 1-26;
}
int ctoi(char& c) { 
    if(c<='z'&&c>='a')
        return c - 'a' + 1;
    if(c<='Z'&&c>='A')
        return c - 'A' + 1+26;
}
void dij() { 
    for(int i = 1; i <= n; i++){
        d[i] = inf;
        vis[i] =0;
    }
    d[52] = 0;
    node t;
    t.v = 52;
    t.w = 0;
    priority_queue<node> q;
    q.push(t);
    while (!q.empty()) {
        t = q.top();
        q.pop();
        if(vis[t.v])
            continue;
        vis[t.v] = 1;
        for (int i = 0; i < mp[t.v].size(); i++) {
            int v = mp[t.v][i].v;
            int w = mp[t.v][i].w;
            if (d[v] > d[t.v] + w) {
                d[v] = d[t.v] + w;
                node tmp;
                tmp.v = v;
                tmp.w = d[v];
                q.push(tmp);
            }
        }
    }
}
int main() {
    cin >> m;
    for(int i = 1; i <= m; i++){
        char a, b;
        int w;
        cin >> a >> b >> w;
        edge tmp;
        tmp.v = ctoi(a);
        tmp.w = w;
        mp[ctoi(b)].push_back(tmp);
    }
    dij();
    int mi = inf;
    int mn = 0;
    for(int i = 27; i <= 51; i++){
        if (mi > d[i]) {
            mi = d[i];
            mn = i;
        }
    }
    cout << itoc(mn) << " " << mi;
    return 0;
}

为什么67分?QAQ

2020/8/13 21:33
加载中...