本文共 1004 字,大约阅读时间需要 3 分钟。
典型并查集,只需要判断find( x ) 和find( y) 是否在一个集合里面即可
// File Name: wiki1073.cpp// Author: bo_jwolf// Created Time: 2013年08月17日 星期六 16时36分22秒#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std;const int maxn = 5005 ;int fa[ maxn ] ;struct node{ int x , y ;}edge[ maxn << 2 ] ;int find( int x ){ return fa[ x ] = fa[ x ] == x ? x : find( fa[ x ] ) ;}int main(){ int n , m , p ; while( cin >> n >> m >> p ) { for( int i = 0 ; i <= n ; ++i ) fa[ i ] = i ; for( int i = 1 ; i <= m ; ++i ) { cin >> edge[ i ].x >> edge[ i ].y ; } for( int i = 1 ; i <= m ; ++i ) { int x = find( edge[ i ].x ) ; int y = find( edge[ i ].y ) ; if( x != y ) { fa[ x ] = y ; } } int x , y ; for( int i = 1 ; i <= p ; ++i ) { cin >> x >> y ; if( find( x ) == find( y ) ) cout << "Yes" << endl ; else cout << "No" << endl ; } } return 0;}
转载地址:http://xxhnm.baihongyu.com/