Advertisement
Guest User

Untitled

a guest
May 20th, 2023
284
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.08 KB | Source Code | 0 0
  1. class Solution {
  2.     int mini=1e9;
  3. private:
  4.      void dfs(int node,int parent,int c,vector<int> &vis,vector<int> &pathVis,vector<int> adjList[]){
  5.          
  6.          vis[node]=c;
  7.          pathVis[node]=1;
  8.          
  9.          for(auto it: adjList[node]){
  10.              if(!vis[it]){
  11.                  dfs(it,node,c+1,vis,pathVis,adjList);
  12.              }
  13.              else if(parent!=it && pathVis[it]==1){
  14.                 mini=min(mini,vis[node]-vis[it]+1);
  15.                
  16.              }
  17.          }
  18.         pathVis[node]=0;
  19.      }
  20. public:
  21.     int findShortestCycle(int n, vector<vector<int>>& edges) {
  22.        
  23.        
  24.         vector<int> vis(n,0);
  25.         vector<int> pathVis(n,0);
  26.         vector<int> adjList[n];
  27.         for(auto it: edges){
  28.             adjList[it[0]].push_back(it[1]);
  29.             adjList[it[1]].push_back(it[0]);
  30.         }
  31.    
  32.         for(int i=0;i<n;i++){
  33.             if(!vis[i])
  34.                 dfs(i,-1,0,vis,pathVis,adjList);
  35.         }
  36.         if(edges[0][0]==n-2 && mini==n-1) mini--;
  37.         if(mini==1e9) return -1;
  38.         return mini;
  39.     }
  40. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement