Блог пользователя ompd292

Автор ompd292, история, 3 года назад, По-английски

https://cses.fi/problemset/task/1680/

#include <bits/stdc++.h>
using namespace std;
int main(){
  int n,m;
  cin>>n>>m;
  vector<pair<int,int>>adj[n+1];
  for(int i=0;i<m;i++){
    int u,v,wt;
    cin>>u>>v;
    adj[u].push_back({v,1});
  }
  vector<int>dist(n+1,INT_MIN);
  vector<int>par(n+1,-1);
  dist[1]=0;
  priority_queue<pair<int,int>>pq;
  pq.push({0,1});
  while(!pq.empty()){
    int node=pq.top().second;
    int dis=pq.top().first;
    pq.pop();
    for(auto it:adj[node]){
      int adjnode=it.first;
      int wt=it.second;
      
      if(dist[adjnode]<dis+wt){
        dist[adjnode]=dis+wt;
        par[adjnode]=node;
        pq.push({dist[adjnode],adjnode});
      }
    }
  }
  if(dist[n]!=INT_MIN){
  cout<<dist[n]+1<<endl;
  int node=n;
  vector<int>v;
  while(node!=-1){
    v.push_back(node);
    node=par[node];
  }
  reverse(v.begin(),v.end());
  for(int i=0;i<v.size();i++)
  cout<<v[i]<<" ";
  }
  else
  cout<<"IMPOSSIBLE";
  return 0;
}

Полный текст и комментарии »

  • Проголосовать: нравится
  • -2
  • Проголосовать: не нравится