标签:mes bsp void using turn ret cin ack int
#include <iostream> #include <cstdio> #include <algorithm> #include <vector> #include <stack> using namespace std; int UFS[1005],ins[1005]; int find(int a){ return a==UFS[a]?a:find(UFS[a]); } void Union(int a,int b){ UFS[find(a)]=find(b); } bool check(int a,int b){ return find(a)==find(b); } stack<int> s; int t[1005],lowlink[1005],T=0; vector<int> mp[1005]; void tarjan(int a){ ins[a]=1; t[a]=lowlink[a]=++T; s.push(a); for(int i=0;i<mp[a].size();i++) if(!t[mp[a][i]]){ tarjan(mp[a][i]); lowlink[a]=min(lowlink[a],lowlink[mp[a][i]]); } else if(ins[mp[a][i]]) lowlink[a]=min(lowlink[a],t[mp[a][i]]); if(lowlink[a]==t[a]) while(s.top()!=a){ ins[a]=0; Union(s.top(),a); s.pop(); } } int main(){ int n,m; cin>>n>>m; for(int i=1;i<=m;i++){ int a,b; cin>>a>>b; mp[a].push_back(b); } for(int i=1;i<=n;i++) UFS[i]=i; tarjan(1); while(1){ int a,b; cin>>a>>b; if(check(a,b)) puts("Yes"); else puts("No"); } return 0; }
标签:mes bsp void using turn ret cin ack int
原文地址:http://www.cnblogs.com/HC-LittleJian/p/7744765.html