結果

問題 No.788 トラックの移動
ユーザー ttttanttttan
提出日時 2019-02-10 20:13:29
言語 C++11
(gcc 11.4.0)
結果
WA  
実行時間 -
コード長 1,957 bytes
コンパイル時間 1,500 ms
コンパイル使用メモリ 169,484 KB
実行使用メモリ 66,176 KB
最終ジャッジ日時 2024-07-07 04:10:59
合計ジャッジ時間 4,872 ms
ジャッジサーバーID
(参考情報)
judge2 / judge4
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 517 ms
66,048 KB
testcase_01 AC 1 ms
6,940 KB
testcase_02 AC 2 ms
6,940 KB
testcase_03 AC 1 ms
6,940 KB
testcase_04 AC 115 ms
19,200 KB
testcase_05 AC 496 ms
66,176 KB
testcase_06 AC 509 ms
66,176 KB
testcase_07 AC 1 ms
6,944 KB
testcase_08 WA -
testcase_09 AC 2 ms
6,940 KB
testcase_10 AC 2 ms
6,940 KB
testcase_11 WA -
testcase_12 WA -
testcase_13 WA -
testcase_14 WA -
testcase_15 AC 222 ms
65,920 KB
testcase_16 AC 448 ms
66,176 KB
権限があれば一括ダウンロードができます
コンパイルメッセージ
main.cpp: In function ‘int main()’:
main.cpp:69:13: warning: ‘num’ may be used uninitialized in this function [-Wmaybe-uninitialized]
   69 |             if(j==num)sum+=(max((ll)0,t[j]-1))*2*d[i][j];
      |             ^~

ソースコード

diff #

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<ll,ll> pll;
int main(){
    ll inf=1000000000000000000;
    ll n,m,l;cin>>n>>m>>l;
    l--;
    ll t[n];for(ll i=0;i<n;i++)cin>>t[i];
    vector<ll> v[n];
    ll cost[n][n];
    for(ll i=0;i<m;i++){
        ll a,b,c;cin>>a>>b>>c;
        a--;b--;
        v[a].push_back(b);
        v[b].push_back(a);
        cost[a][b]=c;
        cost[b][a]=c;
    }
  for(ll i=0;i<n;i++)cost[i][i]=0;
    ll d[n][n];
    for(ll i=0;i<n;i++)fill(d[i],d[i]+n,inf);
    for(ll i=0;i<n;i++){
      priority_queue<pll,vector<pll>,greater<pll> >q;
      q.push(make_pair((ll)0,i));
      d[i][i]=0;
      bool used[n];fill(used,used+n,false);
      while(q.size()>0){
          pll p=q.top();q.pop();
          ll pf=p.first,ps=p.second;
        //cout<<ps<<endl;
          if(used[ps])continue;
          used[ps]=true;
          for(ll j=0;j<v[ps].size();j++){
              ll now=v[ps][j];
              if(used[now])continue;
              if(d[i][now]>pf+cost[ps][now]){
                  d[i][now]=pf+cost[ps][now];
                  q.push(make_pair(d[i][now],now));
              }
          }
      }
    }
  
    ll ans=inf;
    for(ll i=0;i<n;i++){
        if(i==l){
            ll sum=0;
            for(ll j=0;j<n;j++)sum+=t[j]*2*d[i][j];
            ans=min(ans,sum);
          //cout<<sum<<endl;
            continue;
        }
        ll sum=0;
        ll num;
        ll mi=inf;
        for(ll j=0;j<n;j++){
            if(i==j)continue;
            ll ss=d[l][j]-d[j][i];
            if(t[j]==0)ss=d[l][j]+d[j][i];
            if(ss<mi){
                mi=ss;
                num=j;
            }
        }
        sum=d[l][num]+d[num][i];
      //cout<<sum<<" ";
        for(ll j=0;j<n;j++){
            if(j==num)sum+=(max((ll)0,t[j]-1))*2*d[i][j];
            else sum+=t[j]*2*d[i][j];
        }
        ans=min(ans,sum);
      //cout<<sum<<endl;
    }
    cout<<ans<<endl;
}
0