UVa 793 - Network Connections

来源:互联网 发布:用友软件好学吗 编辑:程序博客网 时间:2024/04/19 23:08

题目:给出网络中的边,查询节点的连接状态。

分析:简单题、并查集。

注意:数据读入出错会RE。

#include <iostream>#include <stdlib.h>#include <cstring>#include <stdio.h>#include <stack> using namespace std;char E[ 3 ];//union_set__beginint  sets[ 10005 ];int  rank[ 10005 ];void union_set( int s, int t ) {for ( int i = s ; i <= t ; ++ i ) {sets[i] = i;rank[i] = 0;}}void Union( int a, int b ) {if ( rank[a] > rank[b] )sets[b] = a;else {sets[a] = b;if ( rank[a] == rank[b] )rank[b] ++;}}int Find( int a ) {if ( a != sets[a] )sets[a] = Find( sets[a] );return sets[a];}//union_set__endint main(){int n,m,a,b,A,B;while ( scanf("%d\n",&n) != EOF ) {while ( n -- ) {int v1 = 0,v2 = 0;scanf("%d\n",&m);union_set( 1, m );while ( E[0] = getchar() ) {if ( E[0] == '\n' || E[0] == EOF ) break;scanf("%d%d",&a,&b);getchar();A = Find(a);B = Find(b);if ( E[0] == 'c' ) {if ( A != B )Union( A, B );}else {if ( A != B ) ++ v2;else ++ v1;}}printf("%d,%d\n",v1,v2);if ( n ) printf("\n");}}return 0;}


原创粉丝点击