1940. Ordering Tasks

桌面实施远程光电体积描记法:使用面部视频测量心率的C++详细指南 在现代医疗和健康监测领域,心率是一个非常重要的生理参数,它可以为我们提供关于身体健康状况的重要信息。但是,随着技术的进步,现在我们有了一种新的方法,称为远程光电体积描记法(rPPG),它可以无需与皮肤接触就测量心率。然后,我们从面部颜色的信号序列中提取绿色通道的值,因为绿色通道对于心率的变化最为敏感。在上述代码中,我们使用了OpenCV库,它是一个开源的计算机视觉库,非常适合这种应用。这种变化是由于血液流动引起的,当心脏跳动时,血液流经面部,导致肤色的轻微变化。要实现rPPG,首先需要检测并跟踪人脸。 阅读详情

一道典型的拓扑排序题,在有多解的情况下输出字典序最小的。我在这里被坑了好久,在每次插入队列或向量后都要对其进行重新的排序才能保证输出的是最小字典序。可以用set来选作储存容器。

#include <iostream>
#include <cstring>
#include <vector>
#include <algorithm>
#include <cmath>
#include <queue>
#include <set>
using namespace std;
const int maxn =100010;
int NumVex,NumEdge;
int vis[maxn];
int indegree[maxn];
struct edge {
    int end;
    edge(int _end=0):end(_end){}

};
bool cmp(edge a,edge b) {
    return a.end<b.end;
}
vector<edge> v[maxn];

void f() {
      set<int> Q;
      for (int i=1;i<=NumVex;i++) {
         if(indegree[i]==0) {
            Q.insert(i);
         }
      }
      while (!Q.empty()) {
         int tmp = *Q.begin();
         cout<<tmp<<" ";
         Q.erase(Q.begin());
         for (int i=0;i<v[tmp].size();i++) {
            if((--indegree[v[tmp][i].end])==0) {
                     Q.insert(v[tmp][i].end);
            }
         }
      }
      cout<<endl;
}


int main() {
    int t;
    cin>>t;
    while(t--) {
        cin>>NumVex>>NumEdge;
        memset(indegree,0,sizeof(indegree));
        for(int i=1;i<=NumVex;i++)  v[i].clear();
        for(int i=1;i<=NumEdge;i++) {
            int a,b;
            cin>>a>>b;
            v[a].push_back(edge(b));
             indegree[b]++;
        }
        f();



    }
}

接下来是两个错误的代码
错误一:插入队列后并没有排序,假设在队列中的节点有1,5;然后对1进行操作的时候,有加入了节点2,那么队列中的数据就成了5,2。显然是不合理的。

#include <iostream>
#include <cstring>
#include <vector>
#include <algorithm>
#include <cmath>
#include <queue>
using namespace std;
const int maxn =100010;
int NumVex,NumEdge;
int vis[maxn];
int indegree[maxn];
struct edge {
    int end;
    edge(int _end=0):end(_end){}

};
bool cmp(edge a,edge b) {
    return a.end<b.end;
}
vector<edge> v[maxn];

void f() {
      queue<int> Q;
      for (int i=1;i<=NumVex;i++) {
         if(indegree[i]==0) {

            Q.push(i);
         }
      }
      while (!Q.empty()) {
         int tmp = Q.front();
         cout<<tmp<<" ";
         Q.pop();
         for (int i=0;i<v[tmp].size();i++) {
            if((--indegree[v[tmp][i].end])==0) {

                     Q.push(v[tmp][i].end);
            }
         }
      }
}


int main() {
    int t;
    cin>>t;
    while(t--) {
        cin>>NumVex>>NumEdge;
        memset(indegree,0,sizeof(indegree));
        for(int i=1;i<=NumVex;i++)  v[i].clear();
        for(int i=1;i<=NumEdge;i++) {
            int a,b;
            cin>>a>>b;
            v[a].push_back(edge(b));
             indegree[b]++;
        }
      for (int i=1;i<=NumVex;i++) sort(v[i].begin(),v[i].end(),cmp);//这里换另一种方式不能通过sicily的编译 
        memset(vis,0,sizeof(vis)); 
        f();
        cout<<endl;


    }
}                                 

代码二:
错误原因:还是顺序的问题比如在第一循环处理的时候有节点2,4将要输出,在处理2的时候得到3节点入度为0,但是输出的时候还是输出2,4,3。改正的时候我加了flag当每次得到新的节点就,跳出循环又从节点1开始,但是超时,毕竟循环是O(NumVex)而且有许多不必要的比较操作。

#include <iostream>
#include <cstring>
#include <vector>
#include <algorithm>
#include <cmath>
using namespace std;
const int maxn =100010;
int NumVex,NumEdge;
int vis[maxn];
int indegree[maxn];
struct edge {
    int end;
    edge(int _end=0):end(_end){}

};
bool cmp(edge a,edge b) {
    return a.end<b.end;
}
vector<edge> v[maxn];

void f() {
    int ans[NumVex];
    int k = 0;
   for (int p =0;p<NumVex;p++) { 
    if(k==NumVex) break;
    for(int i=1;i<=NumVex;i++) {
        if(indegree[i]==0&&!vis[i]) {
             vis[i] = 1; ans[k++]=i;
            for (int j=0;j<v[i].size();j++) {
                if(!vis[v[i][j].end])  {
                     indegree[v[i][j].end]--;
                }

            }
    }   }
    }

    for (int i=0;i<NumVex;i++) cout<<ans[i]<<" ";  
    cout<<endl;
}


int main() {
    int t;
    cin>>t;
    while(t--) {
        cin>>NumVex>>NumEdge;
        memset(indegree,0,sizeof(indegree));
        for(int i=1;i<=NumVex;i++)  v[i].clear();
        for(int i=1;i<=NumEdge;i++) {
            int a,b;
            cin>>a>>b;
            v[a].push_back(edge(b));
             indegree[b]++;
        }
        for (int i=1;i<=NumVex;i++) sort(v[i].begin(),v[i].end(),cmp);
        memset(vis,0,sizeof(vis)); 
        f();



    }
}                                 
复分析 阿尔福斯(Ahlfors) 第三版答案 英文 答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案 立即下载

相关推荐

易智联LM401模块学习(四)——双串口收发

串口的发送和接受有三种方式,分别是阻塞发送和接收(轮询)、中断方式发送和接收、DMA方式发送和接收。这里我使用阻塞+中断的方式实现双串口通信。简单的串口收发。

weixin_46046597的博客 990

Sicily1940-Ordering Tasks

//开始的时候就以为是个拓扑排序而已,忽略了其中的题目要求最小的解答,然后一直wa,后来仔细考虑以后使用了set作为结构 //使用STL的set的优势在于保证当把入度为0的task输入进去之后头元素最小,而queue不能保证这点 #include "iostream" #include "vector" #include "algorithm" #include "cstring" #incl

小黑屋研究室 551

kettle写doris操作

文件在目录:doris-master\extension\kettle\assemblies\plugin\target\doris-stream-loader-plugins-9.4.0.0-343.zip。官方提供了doris stream load插件,下载源码编译后放到kettle的插件目录即可使用。地址:https://github.com/apache/doris.git。注意:需要doris插件或者kettle转换生成模板的私聊博主。使用PDmaner同步业务库生成建表语句。

weixin_44449054的博客 3029

Sicily 1940. Ordering Tasks

拓扑排序,但题目保证了不会形成环,故可实现全部输出;而由于答案唯一性,需要输出字典序最小的。我的策略是建立一个同步的跟踪各个节点入度数的数组,随着排序的进行不断更新,然后添加新的入度为0的节点到一个set里面,每次输出最前的,也就是最小的那个节点,以此来保证字典序最小。 Run Time: 0.44sec Run Memory: 6216KB Code length: 969Byte

Ederick的专栏 1610

改善电流不匹配的级联电流镜布局设计 2002

模拟金属氧化物半导体 (MOS) 集成电路的性能在很大程度上取决于匹配精度的因素。 电流镜的匹配精度在模拟 IC 性能中尤为重要。 布局技术和器件尺寸被认为是可以在很大程度上改善匹配行为的主要因素。 尽管这些信息很重要,但对这两个因素的研究或研究有限。 在本文中,我们基于 Lan 等人 [1999] 提出的简单电流镜提出了一种新的级联电流镜布局技术。 Cascode电流镜的新布局在参数梯度存在的情况下改善了匹配特性。 讨论了跨晶体管有源区域的阈值梯度对电流镜匹配特性的影响。 使用 SPICE 仿真比较了新

Srfun的博客 4228

Linux下Linpack测试GPU和CPU性能

前面的文章已经介绍了如何搭建Linpack环境:https://blog.csdn.net/liu_feng_zi_/article/details/107429720 接下来说明如何使用 一、编写运行脚本: 新建文件:run_linpack.sh,内容如下: export HPL_DIR =/root/LHC/Linpack/hpl-2.0_FERMI_v15 export MKL_NUM_THREADS=6 export OMP_NUM_THREADS=6 export MKL_DYNAMI.

liu_feng_zi_的专栏 4633

sicily1940. Ordering Tasks

1940. Ordering Tasks Constraints Time Limit: 1 secs, Memory Limit: 32 MB Description  John has n tasks to do. Unfortunately, the tasks are not independent and the execution of one task is only p

程序与算法的专栏 1129

模型实战(16)之StrongSort (OSNET)配合YOLOv5、v7、v8 实现多目标跟踪详解

StrongSort (OSNET)配合YOLOv5、v7、v8 实现多目标跟踪详解

yohnyang的博客 1770

sicily 1940.Ordering Tasks

题意分析:1.拓扑排序     2.关于按字母序输出. 解题思路:刚开始一直纠结在字母序输出问题上,最后了解到可以用一种自己美接触过的数据结构,优先队列即优先级高的元素先出列。用法如下:     1.priority_queueint> qi;//标准库中默认是     2.priority_queueint, vectorint>, greaterint> >qi2;//元素小的优先级高

因为特别的二,所以二的特别。 1000

SAP Fiori Launchpad 概述

SAP Fiori launchpad 是托管 SAP Fiori 应用程序的 shell,并为应用程序提供导航、个性化、嵌入式支持和应用程序配置等服务。SAP Fiori Launchpad 是移动和桌面设备上 SAP Fiori 应用程序的入口点。启动板显示带有图块的主页,其中可以显示实时状态指示器,例如打开的任务数量。每个图块代表用户可以启动的业务应用程序。这包括 SAP Business Suite 事务应用程序和 SAP Smart Business 分析应用程序。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 931

VTK在QT与非QT环境下使用的区别

VTK可以在QT框架内使用,也可以独立于QT使用,这两种使用方式在架构、交互和渲染方面有显著差异。

深之JohnChen的专栏 628

Sicily 1940. Ordering Tasks 解题报告

1940_Ordering_Tasks 题目链接: http://soj.me/1940 题目大意: 输入n和m,n代表任务的个数,m代表任务间先后关系的个数.后面输入m个先后关系,比如1 4表示任务1要在任务4之前完成.找到一种完成所有任务的顺序,满足所有要求的先后顺序,有多个解时要求输出字典序最小的. 思路: 拓扑排序问题,但是要求输出字典序最小的.输入实际上是一个有向...

weixin_34356310的博客 140

4-都2026年了,嵌入式发展前景怎么样,还适合入行吗?

本文系统分析了嵌入式行业的发展前景,指出到2026年嵌入式将迎来由"万物智联"驱动的黄金周期。文章回顾了嵌入式技术的四个演进阶段,从专用计算机到AIoT时代,强调其技术积累的延续性。作者从人才流向、产业智能化转型、高校新增专业等角度论证嵌入式行业的蓬勃发展,并提出"铁三角"模型分析其驱动力和护城河。最后给出职业发展路径建议,认为嵌入式适合长期主义者,在智能汽车、边缘计算等领域有广阔前景。文章建议读者抓住产业升级机遇,选择这一稳定且有复利效应的技术赛道。

指尖动听知识库 389

1940. Ordering Tasks(拓扑排序,用set装住入度为0的点)

/*1940. Ordering Tasks(拓扑排序,用set装住入度为0的点) 给出一些数字对(i,j), i必须在j前面执行 输出一个序列,使得序列按照指定的先后顺序输出,如果有多个 结果,则按照字典序输出.用set来装入度为0的点。set的特性是 按照插入的大小进行排序。所以可以保证字典序 拿到一个入度为0的后,就在原来的记录入得的inDegree的数组相应 位置-

xiehaoyun2012的专栏 408

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

[SOJ] Ordering Tasks

1940. Ordering Tasks Constraints Time Limit: 1 secs, Memory Limit: 32 MB Description John has n tasks to do. Unfortunately, the tasks are not independent and the execution of one ta...

arilx06604的专栏 190

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

全排列拓扑排序

由于要解答用dfs写了一个输出一张有向图的所有拓扑排序的代码。 顺便再这里总结一下关于dfs写的技巧,关于dfs一定是要有循环的,只有这样才能够构成排列,而且分清楚当前步骤要做什么,在调用下层后要注意恢复状态。一般纯dfs的效率都不会高,这时候特别要注意减枝。#include <iostream> #include <cstring> #include <vector> #include <alg

stloztoeplitz的博客 770

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

无线广播(Broadcast)

描述 某广播公司要在一个地区架设无线广播发射装置。该地区共有n个小镇,每个小镇都要安装一台发射机并播放各自的节目。不过,该公司只获得了FM104.2和FM98.6两个波段的授权,而使用同一波段的发射机会互相干扰。已知每台发射机的信号覆盖范围是以它为圆心,20km为半径的圆形区域,因此,如果距离小于20km的两个小镇使用同样的波段,那么它们就会由于波段干扰而无法正常收听节目。现在给出这些距离小于20

stloztoeplitz的博客 725

有向图边的分类

表达用规范的标示符,若空间不够的话可以用vector来模拟邻接表。 本题只有一组测试样例,所以直接输出样例答案也是可以过得。 memset可以用-1初始化,可以看我转载的一篇关于memset函数的文章#include <iostream> #include <cstring> using namespace std; const int maxn = 110; int adjMatrix[max

stloztoeplitz的博客 532

最长句子

从子树到父节点却是一个选择。#include <set> #include <map> #include <string> #include <iostream> using namespace std; int getLen(string s,map<string,set<string>>& mp,map<string,int>& hasFind){ if(hasFind.count(s)==1)

stloztoeplitz的博客 440

红与黑

#include <iostream> #include <cstring> using namespace std; const int maxn = 25; int dr[]={0,0,1,-1}; int dc[]={1,-1,0,0}; char data[maxn][maxn]; int vis[maxn][maxn]; int dfs(int lr,int lc,int r,int

stloztoeplitz的博客 412

Poj 1258

#include<iostream> #include <string.h> using namespace std; const int maxn = 1000; int graph[maxn][maxn]; int dis[maxn]; int vis[maxn]; int n; const int INF = 0x3f3f3f3f; int tree(int r) { int ans

stloztoeplitz的博客 388

1024. Magic Island

为什么可以用dfs呢,因为它是一棵树,n个点n-1条边。虽然感觉dijkstra算法效率够高了只有O(n)的复杂度,但是这个dfs也是啊,而且效率更高。 学习点:用vector数组来表示临界表,我一直以为要自己写效率很低容易错的邻接表呢。这个方法不错! 易错点:图是无向图,不要搞错有向图了,而且要注意初始化。#include <iostream> #include <vector> #inclu

stloztoeplitz的博客 366
上一篇: 1937. 导游
下一篇: 全排列拓扑排序
stloztoeplitz
博客等级 码龄11年 3粉丝 118原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值