标签: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