选课大作战

本文介绍了一种通过并查集算法解决选课系统中课程依赖关系校验的方法。旨在确保选课系统的逻辑正确性,避免形成闭环依赖。文章提供了一个示例程序,演示如何检查课程之间的前置条件是否合理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

选课大作战

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;  
    }   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值