首页 > 其他分享 >LeetCode/课程表IV

LeetCode/课程表IV

时间:2023-07-31 19:14:28浏览次数:37  
标签:pre vector graph IV 先决条件 课程 queries 课程表 LeetCode

你总共需要上 numCourses 门课,课程编号依次为 0 到 numCourses-1 。你会得到一个数组 prerequisite ,其中 prerequisites[i] = [ai, bi] 表示如果你想选 bi 课程,你 必须 先选 ai 课程。

有的课会有直接的先修课程,比如如果想上课程 1 ,你必须先上课程 0 ,那么会以 [0,1] 数对的形式给出先修课程数对。
先决条件也可以是 间接 的。如果课程 a 是课程 b 的先决条件,课程 b 是课程 c 的先决条件,那么课程 a 就是课程 c 的先决条件。

你也得到一个数组 queries ,其中 queries[j] = [uj, vj]。对于第 j 个查询,您应该回答课程 uj 是否是课程 vj 的先决条件。

返回一个布尔数组 answer ,其中 answer[j] 是第 j 个查询的答案。

1. Floyd算法

预先计算所有顶点之间的连接(前置)关系,也就是有向边的连接

class Solution {
public:
    vector<bool> checkIfPrerequisite(int n, vector<vector<int>>& prerequisites, vector<vector<int>>& queries) {
        bool graph[n][n]; //graph[i][j]为true表示i是j的前驱
        memset(graph,false,sizeof(graph));
        vector<bool> res(queries.size());
        for(auto &pre:prerequisites)
            graph[pre[0]][pre[1]] = true;

        for(int i=0;i<n;i++) //尝试借助i连接j和k,这里要先遍历连接边,保证无后效性
            for(int j=0;j<n;j++)
                for(int k=0;k<n;k++)
                    if(graph[j][i]&&graph[i][k])
                        graph[j][k] = true;
        for(int i=0;i<queries.size();i++)
            res[i] = graph[queries[i][0]][queries[i][1]];
        return res;
    }
};

2. 拓扑排序


标签:pre,vector,graph,IV,先决条件,课程,queries,课程表,LeetCode
From: https://www.cnblogs.com/929code/p/17594233.html

相关文章

  • Codeforces Round 888 (Div. 3) 补题
    独立补了一道记忆化搜索的题,https://codeforces.com/contest/1851/problem/E由于初次接触对于使用场景和注意事项都不是很熟悉,写加调估计得有3h。本题的题面保证了本题是个无环图,允许dfs函数会有出口,存图不能用链式前向图,因为非常容易构造数据使得为稠密图,所以用二维数组或vec......
  • android隐式启动Activity的例子
    android隐式启动Activity的例子【原创】android2.2测试通过android隐匿启动Activity的例子,同样适用于Service,BroadcastReceiver<activityandroid:name=".MyActivityTwo"android:label="ThisMyActivityTwo"><!--这样进行匹配:Intentintent=newIntent(Intent.ACT......
  • Codeforces Round 887 (Div. 2)
    CodeforcesRound887(Div.2)A.Desorting题目大意给出一个长度为\(n\)的数组\(a\),可以执行这个操作任意次。选择一下标\(i\),使得\(a_{1...i}\)加上\(1\),\(a_{i+1...n}\)减少\(1\)。问最少几次操作使得数组\(a\)无序。思路首先如果\(a\)原本就无序的......
  • DRF之APIView全笔记
    一.APIView基本视图,所有的都用这个来作viewsetmixin主要管as_view{}里的调配让视图不再需要两个类二.通用视图GenericAPIView(rest_framework.viewsets)GenericAPIView一共五个功能,数据库获取、分页、序列化、getobject\还有frilter_queryset__东西挺多的主要管self.get_object......
  • 从 C++到 Objective-C ----2
    从C++到Objective-C(7):继承简单继承Objective-C也有继承的概念,但是不能多重继承。不过,它也有别的途径实现类似多重继承的机制,这个我们后面会讲到。C++Objective-CclassFoo:publicBar,{}@interfaceFoo:Bar//单继承//如果要同时“继承”Wiz,需要使用......
  • 从 C++ 到Objective-C
    从C++到Objective-C(1):前言DevBean 日期:2011年03月18日Objective-C可以算作Apple平台上“唯一的”开发语言。很多Objective-C的教程往往直接从Objective-C开始讲起。不过,在我看来,这样做有时候是不合适的。很多程序员往往已经掌握了另外一种开发语言,如果对一门新......
  • Activity及其生命周期
    Activity是Android用户界面的基础组件,它一般存放在任务栈(Task)中, 所以Activity是以栈的形式存放的,也就遵循先进后出的原则,也不支持重新排序。如果要改变Activtiy的顺序,只能根据压栈和出栈的操作来改变。当启动一个Application时,系统会默认创建一个对应的Task,用来存放......
  • mysql udf mof escalate privilege
    原理udf=‘userdefinedfunction‘,即‘用户自定义函数’。文件后缀为‘.dll’,常用c语言编写。通过在udf文件中定义新函数,对MYSQL的功能进行扩充,可以执行系统任意命令。将MYSQL账号root转化为系统system权限。思路获取udf文件上传udf到指定位置sqlmap有现成的udf文件,分为32......
  • Hive 内置函数
    -----------------Hive常用的内置函数------------------------查看内置函数showfunctions;--查看函数的用法describefunctionextendedcount;------------StringFunctions字符串函数------------selectlength("itcast");--长度selectreverse("itcast");--反转......
  • Hive select查询语句
     创建表CREATETABLEt_usa_covid19(count_datestring,countystring,statestring,fipsint,casesint,deathsint)rowformatdelimitedfieldsterminatedby",";--将数据load加载到t_usa_covid19表对应的路径下loaddatalocalinpath......