Submission #1531369


Source Code Expand

#include <iostream>
#include <iomanip>
#include <vector>
#include <algorithm>
#include <cstring>
#include <map>
#include <queue>
#include <cmath>

#define MOD 1000000007
#define ll long long
#define ld long double

using namespace std;

template <class T> struct Dijkstra {

  struct Edge{
    long long to;
    T cost;
    Edge(long long _to, T _cost) : to(_to), cost(_cost) {}
  };

  const T INF = numeric_limits<T>::max() / 2;
  vector< vector< Edge > > G;
  vector< T > d;
  Dijkstra (long long n) : G(n), d(n) {}

  void add_directed_edge(long long a, long long b, T c) {
    G[a].push_back(Edge(b,c));
  }

  void add_undirected_edge(long long a, long long b, T c) {
    G[a].push_back(Edge(b,c));
    G[b].push_back(Edge(a,c));
  }

  void init(long long s) {
    priority_queue< pair<T,long long>,vector< pair<T,long long> >, greater< pair<T,long long> > > que;
    fill(d.begin(), d.end(), INF);
    d[s] = 0;
    que.push(make_pair(0,s));
    while (!que.empty()){
      pair<T,long long> p = que.top();
      que.pop();
      long long v = p.second;
      if (d[v] < p.first) continue;
      for (long long i = 0; i < G[v].size(); i++) {
	Edge e = G[v][i];
	if (d[e.to] > d[v] + e.cost) {
	  d[e.to] = d[v] + e.cost;
	  que.push(make_pair(d[e.to],e.to));
	}
      }
    }
  }

  T dist(long long a) {
    return d[a];
  }

  vector<long long> route(long long a, long long b){

  }
};


int main(){
  ll N,M;
  vector<ll> l;
  vector<pair<ll,ll> >uv;
  vector<pair<ll,ll> >memo;//pair(to, cost)

  vector<ll> result;

  cin.tie(0);
  ios::sync_with_stdio(false);
  cin >> N >> M;


  for(ll i = 0;i< M;i++){
    ll inu,inv,inl;
    cin >> inu >> inv >> inl;
    inu--;inv--;

    if(inu==0)memo.push_back(make_pair(inv, inl));
    else if(inv==0)memo.push_back(make_pair(inu, inl));
    else{
      uv.push_back(make_pair(inu,inv));
      l.push_back(inl);
    }
  }

  Dijkstra<ll> road(N);
  if(uv.size()==0){
    cout << "-1" << endl;
    return 0;
  }
  for(ll i =0;i<uv.size();i++){
    road.add_undirected_edge(uv[i].first,uv[i].second,l[i]);
  }

//memoから一つずつ取り出して、ダイクストラ構築して計算
  for(ll i =0;i<memo.size();i++){
    road.init(memo[i].first);
    for(ll j = i+1;j<memo.size();j++){
      ll d=road.dist(memo[j].first);
      if(d==-1) continue;
      d+=memo[i].second;
      d+=memo[j].second;
      result.push_back(d);
    }
  }

  sort(result.begin(), result.end());
  if(result.size()==0) cout << "-1" << endl;
  else cout << result[0] << endl;

  return 0;
}

Submission Info

Submission Time
Task C - Blue Bird
User ukohank517
Language C++14 (GCC 5.4.1)
Score 100
Code Size 2650 Byte
Status AC
Exec Time 110 ms
Memory 4852 KB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 100 / 100
Status
AC × 3
AC × 33
Set Name Test Cases
Sample sample_01.txt, sample_02.txt, sample_03.txt
All sample_01.txt, sample_02.txt, sample_03.txt, subtask1_01.txt, subtask1_02.txt, subtask1_03.txt, subtask1_04.txt, subtask1_05.txt, subtask1_06.txt, subtask1_07.txt, subtask1_08.txt, subtask1_09.txt, subtask1_10.txt, subtask1_11.txt, subtask1_12.txt, subtask1_13.txt, subtask1_14.txt, subtask1_15.txt, subtask1_16.txt, subtask1_17.txt, subtask1_18.txt, subtask1_19.txt, subtask1_20.txt, subtask1_21.txt, subtask1_22.txt, subtask1_23.txt, subtask1_24.txt, subtask1_25.txt, subtask1_26.txt, subtask1_27.txt, subtask1_28.txt, subtask1_29.txt, subtask1_30.txt
Case Name Status Exec Time Memory
sample_01.txt AC 1 ms 256 KB
sample_02.txt AC 1 ms 256 KB
sample_03.txt AC 1 ms 256 KB
subtask1_01.txt AC 16 ms 1020 KB
subtask1_02.txt AC 7 ms 768 KB
subtask1_03.txt AC 50 ms 2424 KB
subtask1_04.txt AC 1 ms 256 KB
subtask1_05.txt AC 9 ms 768 KB
subtask1_06.txt AC 56 ms 2424 KB
subtask1_07.txt AC 3 ms 384 KB
subtask1_08.txt AC 1 ms 256 KB
subtask1_09.txt AC 57 ms 2424 KB
subtask1_10.txt AC 19 ms 1404 KB
subtask1_11.txt AC 1 ms 256 KB
subtask1_12.txt AC 3 ms 512 KB
subtask1_13.txt AC 8 ms 768 KB
subtask1_14.txt AC 1 ms 256 KB
subtask1_15.txt AC 102 ms 4724 KB
subtask1_16.txt AC 27 ms 1528 KB
subtask1_17.txt AC 3 ms 512 KB
subtask1_18.txt AC 42 ms 2424 KB
subtask1_19.txt AC 42 ms 2296 KB
subtask1_20.txt AC 8 ms 896 KB
subtask1_21.txt AC 13 ms 1020 KB
subtask1_22.txt AC 87 ms 3956 KB
subtask1_23.txt AC 110 ms 4852 KB
subtask1_24.txt AC 10 ms 896 KB
subtask1_25.txt AC 28 ms 1528 KB
subtask1_26.txt AC 42 ms 2804 KB
subtask1_27.txt AC 28 ms 2424 KB
subtask1_28.txt AC 4 ms 640 KB
subtask1_29.txt AC 45 ms 2932 KB
subtask1_30.txt AC 1 ms 256 KB