| # | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 | 
|---|---|---|---|---|---|---|---|
| 1088338 | Rolo678 | Aesthetic (NOI20_aesthetic) | C++14 | 0 ms | 0 KiB | 
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
using namespace std;
#define int long long
vector<vector<pair<int,int>>>g(3e5+5);
vector<long long>dp2(3e5+5,-1);
 vector<long long>dp(3e5+5,-1);
 
signed main()
{
  int n,m;
  cin >> n>>m;
 // cin >> n >> m;
  vector<pair<int,int>>e;
  for(int i = 1;i<=m;i++)
  {
    int a,b,w;
    cin >> a >> b >> w;
    //cout << 'o';
    g[a].push_back({b,i});
    g[b].push_back({a,i});
    e[i] = {a,b};
//cout << 'o';
  }
 
  for(int i = n-1;i> 0;i--)
  {
   
  }
 
  //dfs();
  dp[1] =0;
  queue<int>q;
  q.push_back(1);
  while(!q.empty())
  {
    v = q.top();
    q.pop();
    for(auto i : g[v])
    {
      if(dp[u] == -1)
      {
        q.push(u);
        dp[u] = dp[v] + 1;
      }
    }
  }
    dp2[n] =0;
  queue<int>q;
  q.push_back(n);
  while(!q.empty())
  {
    int v = q.front();
    q.pop();
    for(auto i : g[v])
    {
      if(dp2[u] == -1)
      {
        q.push(u);
        dp2[u] = dp2[v] + 1;
      }
    }
  }
  int mn = 1e9+5;
  int num = 0;
  for(auto i : e)
  {
    if(dp[i.first] + dp2[i.second]+1 == mn)
    {
      num++;
    }
    else if(dp[i.first] + dp2[i.second+1 <mn)
    {
       int mn = dp[i.first] + dp2[i.second] +1 ;
     num = 1;
    }
  }
   cout << mn + (num > 1);
}
