求助!!
查看原帖
求助!!
1120828
linjinkun楼主2023/10/10 19:43
#include<bits/stdc++.h>
using namespace std;
int m;
int vis[30],d[30];
int c[30];
struct node
{
    int x;
    int y;
    bool operator<(const node&a)const
    {
        return y>a.y;
    }
};
vector<node>a[30];
priority_queue<node>que;
int main()
{
    scanf("%d",&m);
    for(int i = 1;i<=m;i++)
    {
        char x,y;
        int z;
        cin >> x >> y;
        scanf("%d",&z);
        if(x>='A'&&x<='Z')
        {
            c[x+32-'a'+1] = 1;
        }
        if(y>='A'&&y<='Z')
        {
            c[y+32-'a'+1] = 1;
        }
        a[x+(x>='A'&&x<='Z')*32-'a'+1].push_back({y+(y>='A'&&y<='Z')*32-'a'+1,z});
        a[y+(y>='A'&&y<='Z')*32-'a'+1].push_back({x+(x>='A'&&x<='Z')*32-'a'+1,z});
    }
    memset(d,0x3f,sizeof(d));
    d[26] = 0;
    que.push({26,0});
    while(que.size())
    {
        node e = que.top();
        que.pop();
        if(vis[e.x] == 1)
        {
            continue;
        }
        vis[e.x] = 1;
        for(int i = 0;i<a[e.x].size();i++)
        {
            node s = a[e.x][i];
            if(vis[s.x] == 0&&s.y+d[e.x]<d[s.x])
            {
                d[s.x] = s.y+d[e.x];
                que.push({s.x,d[s.x]});
            }
        }
    }
    char qwq;
    int ans = INT_MAX;
    for(int i = 1;i<=25;i++)
    {
        if(c[i] == 1)
        {
            if(ans>d[i])
            {
                ans = d[i];
                qwq = 'a'+i-1;
            }
        }
    }
    cout << char(qwq-32) << " ";
    printf("%d",ans);
    return 0;
}

为什么22分,求助!!

2023/10/10 19:43
加载中...