Untitled
unknown
c_cpp
9 months ago
4.0 kB
5
Indexable
#include<bits/stdc++.h> using namespace std; // Simple Debugging Template #ifndef ONLINE_JUDGE #define pr_arr(a,n)cout<<#a<<":";for(int i=0;i<n;i++)cout<<a[i]<<" ";cout<<endl; #define pr_mat(mat,row,col)cout<<#mat<<":\n";for(int i=0;i<row;i++){for(int j=0;j<col;j++)cout<<mat[i][j]<<" ";cout<<endl;} #define pr(...)dbs(#__VA_ARGS__,__VA_ARGS__) template<class S,class T>ostream &operator<<(ostream &os,const pair<S,T> &p){return os<<"("<<p.first<<","<<p.second<<")";} template<class T>ostream &operator<<(ostream &os,const vector<T> &p){os<<"[";for(auto&it:p)os<<it<<" ";return os<<"]";} template<class T>ostream &operator<<(ostream &os,const set<T>&p){os<<"[";for(auto&it:p)os<<it<<" ";return os<<"]";} template<class T>ostream &operator<<(ostream &os, const stack<T>&s){os<<"[";stack<T> temp(s);while (!temp.empty()){os << temp.top();temp.pop();if (!temp.empty())os << ", ";}return os << "]";} template<class T>ostream &operator<<(ostream &os, const queue<T>&q){os<<"[";queue<T>temp(q);int size=temp.size();for(int i=0;i<size;i++){T front=temp.front();os<<front;temp.pop();if(i<size-1)os<< ", ";temp.push(front);}return os<< "]";} template<class T>ostream &operator<<(ostream &os,const multiset<T>&p){os<<"[";for(auto&it:p)os<<it<<" ";return os<<"]";} template<class T> ostream &operator<<(ostream &os, const priority_queue<T>&pq){os<<"[";priority_queue<T> temp(pq);while(!temp.empty()){os<<temp.top();temp.pop();if(!temp.empty()){os<<", ";}}return os << "]";} template<class S,class T>ostream &operator<<(ostream &os,const map<S,T>&p){os<<"[";for(auto&it:p)os<<it<<" ";return os<<"]";} template<class T>void dbs(string str,T t){cout<<str<<":"<<t<<"\n";} template<class T,class...S>void dbs(string str,T t,S... s){int idx=str.find(',');cout<<str.substr(0,idx)<<":"<<t<<",";dbs(str.substr(idx+1),s...);} #else #define pr(...){} #define debarr(a,n){} #define debmat(mat,row,col){} #endif // Debugging Template ends #define f first #define s second #define ARRAY_INPUT(arr, n) for(int i = 0; i < n; i++) cin >> arr[i] #define FOR(i, j, k, inc) for (int i=j ; i<k ; i+=inc) #define fr(i,x) for(int i = 0; i < x;i++) #define mip(x) ll x;cin>>x #define ip(x) cin>>x #define pb push_back using ll = long long; using pii = pair<int,int>; using pll = pair<ll,ll>; using vi = vector<int>; using vll = vector<long long>; using vpii = vector<pii>; using vpll = vector<pll>; using vvi = vector<vector<int>>; using vvll = vector<vector<long long>>; using vvpii = vector<vector<pii>>; using vvpll = vector<vector<pll>>; using state = pll; ll n,m; vvll g; vvll par; vll dis; void printer(deque<ll> &dq){ cout << "dq:["; for(auto x:dq){ cout << x <<" "; } cout << "]\n"; } void bfs01(){ dis.assign(n+1,1e9); deque<ll> dq; dq.push_back(1); dis[1] = 0; // printer(dq); while(!dq.empty()) { ll node = dq.front(); dq.pop_front(); // Forward link for(auto v: g[node]){ if(dis[v] > dis[node]+0){ dis[v] = dis[node]; dq.push_front(v); } } // Backward link for(auto v: par[node]){ if(dis[v] > dis[node]+1){ dis[v] = dis[node]+1; dq.push_back(v); } } // printer(dq); } } void solve(){ cin >> n >> m; g.resize(n+1); par.resize(n+1); fr(i,m){ mip(a);mip(b); if(a==b) continue; g[a].pb(b); par[b].pb(a); } pr(g); pr(par); bfs01(); if(dis[n] == 1e9) cout << "-1\n"; else cout << dis[n] << "\n"; } int main(){ ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); #ifndef ONLINE_JUDGE freopen("Input.txt","r",stdin); freopen("Output.txt","w",stdout); freopen("Error.txt","w",stderr); #endif int t = 1; cin >> t; while(t--){ solve(); } } 1 7 5 2 1 3 2 3 4 6 2 5 6
Editor is loading...
Leave a Comment