답안 #472580

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
472580 2021-09-13T18:32:56 Z ZaZo_ Toll (BOI17_toll) C++14
10 / 100
75 ms 7344 KB
#include <bits/stdc++.h>
#define ZAZO ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define int long long
using namespace std;
vector<pair<int,int>>edges[50001];
int k , n , m , o ;
int dist[50001],vis[50001]={0};
void prepare()
{
  for(int i = 0 ; i < n+1 ; i ++) dist[i]=INT_MAX;
}
void djk(int s , int e)
{
  priority_queue<pair<int,int>>pq;
  dist[s]=0;
  pq.push({0,s});
  while(!pq.empty())
  {
    int c = -pq.top().first , u = pq.top().second;
    vis[u]=1;
    pq.pop();
    for(int i = 0 ; i < edges[u].size() ; i++)
    {
      if(!vis[edges[u][i].first]&&dist[edges[u][i].first] > dist[u] + edges[u][i].second)
      {
        dist[edges[u][i].first] = dist[u] + edges[u][i].second;
        pq.push({-dist[edges[u][i].first],edges[u][i].first});
      }
    }
  }
}
int32_t main() {
  ZAZO
  cin >> k >> n >> m >> o ;
  int pref[50011];
  for(int i = 0 ; i <= 50001 ; i ++) pref[i]=-1e9;
  for(int i = 0 ; i < m ; i ++)
  {
    int a , b , t;
    cin >> a >> b >> t;
    edges[a].push_back({b,t});
    pref[b]=t;
  }
  if(k==1&&o>100){
  for(int i = 1  ; i <= 50001 ; i++)
  {
    pref[i]+=pref[i-1];
  }
  for(int i = 0 ; i < o ; i ++)
  {
    int a , b;
    cin>>a>>b;
    if(pref[b]-pref[a]<=0) cout<<"-1"<<endl;
    else cout<<pref[b]-pref[a]<<endl;
  }
  }
  else{
    vector<pair<int,pair<int,int>>>v;
   for(int i = 0 ; i < o ; i ++)
   {
     int a , b;
     cin >> a >> b;
     v.push_back({i,{a,b}});
   }
   sort(v.begin(),v.end());
   int ans[o];
   for(int i = 0 ; i < o ; i ++) ans[i]=-1;
   for(int i = 0 ; i < v.size() ; i++)
   {
     if(i && v[i].second.first == v[i-1].second.first)
     {
       if(dist[v[i].second.second] != INT_MAX) ans[v[i].first]=dist[v[i].second.second];
     }
     else
     {
       prepare();
       djk(v[i].second.first , v[i].second.second);
       if(dist[v[i].second.second]!=INT_MAX)
         ans[v[i].first] = dist[v[i].second.second];
     }
   }
   for(int i = 0 ; i < o ; i++)
   cout<<ans[i]<<'\n';
  }
}

Compilation message

toll.cpp: In function 'void djk(long long int, long long int)':
toll.cpp:22:23: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   22 |     for(int i = 0 ; i < edges[u].size() ; i++)
      |                     ~~^~~~~~~~~~~~~~~~~
toll.cpp:19:9: warning: unused variable 'c' [-Wunused-variable]
   19 |     int c = -pq.top().first , u = pq.top().second;
      |         ^
toll.cpp: In function 'int32_t main()':
toll.cpp:68:22: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::pair<long long int, std::pair<long long int, long long int> > >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   68 |    for(int i = 0 ; i < v.size() ; i++)
      |                    ~~^~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 38 ms 3520 KB Output is correct
2 Correct 1 ms 1868 KB Output is correct
3 Incorrect 1 ms 1868 KB Output isn't correct
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 46 ms 5380 KB Output is correct
2 Correct 1 ms 1868 KB Output is correct
3 Correct 1 ms 1868 KB Output is correct
4 Correct 1 ms 1868 KB Output is correct
5 Correct 2 ms 1868 KB Output is correct
6 Correct 1 ms 1868 KB Output is correct
7 Correct 19 ms 1928 KB Output is correct
8 Correct 5 ms 2448 KB Output is correct
9 Correct 38 ms 3432 KB Output is correct
10 Correct 75 ms 7028 KB Output is correct
11 Correct 53 ms 5756 KB Output is correct
12 Correct 35 ms 4776 KB Output is correct
13 Correct 74 ms 7344 KB Output is correct
14 Correct 42 ms 5060 KB Output is correct
15 Correct 36 ms 4460 KB Output is correct
16 Correct 37 ms 4472 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 1868 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 1868 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 38 ms 3520 KB Output is correct
2 Correct 1 ms 1868 KB Output is correct
3 Incorrect 1 ms 1868 KB Output isn't correct
4 Halted 0 ms 0 KB -