View Code of Problem 131

#include <stdio.h>
#include <string.h> 
int flag =0;
int fa[5000];
int find(int x){
	return fa[x]==x?x:(fa[x]=find(fa[x]));
}
void init(int n){
	for(int i=1;i<=n;i++){
		fa[i]=i;
	}
}

void merge(int x,int y,int fa[]){
	fa[find(x)]=find(y);
}
void fidF(int a,int b,int fa[]){
	if(fa[b]==a){
		flag= 0;
		return;
	} 
	else if(fa[b]==b){
		flag=1;
		return;
	}
	fidF(a,fa[b],fa);
}

int main(int argc, char *argv[])
{
	int n,m;
	while(scanf("%d %d",&n,&m)!=EOF){
		init(n);
		flag =0;
		for(int i=0;i<m;i++){
			int a,b;
			scanf("%d %d",&a,&b);
			fidF(a,b,fa);
			if(flag==1){
				merge(a,b,fa);
			}
			else {
				 printf("ERROR\n");
				 break;
			}
		}
		if(flag==1){
			printf("RIGHT\n");
		}
	}
	return 0;
}

Double click to view unformatted code.


Back to problem 131