#39828: RE 求解


buanyz03 (張晁瑋)

學校 : 新北市立板橋高級中學
編號 : 2629
來源 : [114.25.190.198]
最後登入時間 :
2023-09-06 15:43:50
a269. 小氣的國王 | From: [203.69.87.1] | 發表日期 : 2024-04-03 11:22

#include <iostream>
#include <vector>
using namespace std;

struct node
{
    int d,p;
};

node table[10001][10001];

int main()
{
   int n,m,dis[10001],price[10001],s,e,d,c,min_l,index,sum;
   bool visited[10001];

   while(cin>>n>>m)
   {
       if(n==0 && m==0)
       {
           break;
       }

       for(int i=1;i<=n;++i)
       {
           dis[i]=1e9;
           price[i]=0;
           visited[i]=false;
       }
       dis[1]=0;

       for(int i=1;i<=n;++i)
       {
           for(int j=1;j<=n;++j)
           {
               table[i][j].d=1e9;
               table[i][j].p=0;
           }
       }

       for(int i=0;i<m;++i)
       {
           cin>>s>>e>>d>>c;
           table[s][e].d=d;
           table[s][e].p=c;
           table[e][s].d=d;
           table[e][s].p=c;
       }

       sum=0;
       for(int i=1;i<=n;++i)
       {
            min_l=1e9;
            index=-1;
            for(int j=1;j<=n;++j)
            {
                if(!visited[j] && dis[j]<min_l)
                {
                    index=j;
                    min_l=dis[j];
                }
            }

            if(index==-1)
            {
                break;
            }
            visited[index]=true;
            sum+=price[index];

            for(int j=1;j<=n;++j)
            {
                if(!visited[j])
                {
                   if(dis[index]+table[index][j].d<dis[j])
                   {
                      dis[j]=dis[index]+table[index][j].d;
                      price[j]=table[index][j].p;
                   }
                   else if(dis[index]+table[index][j].d==dis[j] && table[index][j].p<price[j])
                   {
                       price[j]=table[index][j].p;
                   }
                }
            }
       }
       cout<<sum<<endl;
   }
}

 
ZeroJudge Forum