选课大作战
Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^
题目描述
眼看着大一新生就要来了,原大一的成了学叔学婶。
C又在为了新学期的选课问题忙了起来。。。。。渐渐地他发现了一个问题:当他想学“计算机网络”这门课时,选课系统告诉他必须学过“离散数学”才能学这门科目。
所以我们就称“离散数学”是“计算机网络”的必学科目。现在已知选课系统收集了很多科目的顺序关系,但是,这个选课系统出了一些故障,一些信息可能不准确,所以请你来帮小X是科目Y也是科目"科目Y的必学科目,科目Z的必学科目,科目X的必学科目<font new="" roman\"="" face="\"Times">"这类也是错误的。
输入
行:1,表示数据的组数T(1 <= T <= 5)
T组数据按照以下格式:第2个整数,N表示课程总数量,课程编号为M表示顺序关系的数量。
2..M+1行:每行A,B。表示课程B的前置课程。
输出
行:每行1,若该组信息有误,输出"Wrong"<font 12pt;\"="" face="\"宋体\"">。
示例输入
22 21 22 13 21 21 3
示例输出
WrongCorrect
提示
来源
示例程序
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <cstdlib>
using namespace std;
int arr[100100],flag;
int Find(int r)
{
return r==arr[r]? r:arr[r]=Find(arr[r]);
}
void Union(int x,int y)
{
int fx=Find(x);
int fy=Find(y);
if(fx!=fy)
{
arr[fx]=fy;
}
else
flag=1;
}
int main()
{
int t,n,m;
int i,x,y;
scanf("%d",&t);
while(t--)
{
flag=0;
scanf("%d%d",&n,&m);
for (i=1;i<=n;i++)
{
arr[i]=i;
}
for (i=0;i<m;i++)
{
scanf("%d%d",&x,&y);
Union(x,y);
}
if(flag==0)
printf("Correct\n");
else
printf("Wrong\n");
}
return 0;
}