题目链接: Coprocessor

题意:

  给出n个待处理的事件(0 - n-1),再给出了n个标(0表示只能在主处理器中处理这个事件,1表示只能在副处理器中处理这个事件),处理器每次能处理多个任务。每个事件有关联,如果一个任务要在副处理器上执行,那它所依赖的任务要么已执行完了,要么和它一起在这个副处理器上同时执行。问副处理器最少调用多少次。

题解:

  首先拓扑排序是肯定要的,先处理出入度为0的点,处理的时候先处理所有入度为0且标为0(只能在主处理器上处理)的点,这样保证每处理一次就把能在副处理器上处理的点全都处理了出来。在处理的过程中保存处理出来的入度为0的点,这样就不用暴力找点了。

 #include<bits/stdc++.h>
using namespace std;
const int MAX_N = 1e5+;
int res[MAX_N];
vector<int> vec[MAX_N];
int in[MAX_N];
queue<int> que1,que2;
int main()
{
int N,M,T;
while(cin>>N>>M)
{
memset(res,,sizeof(res));
memset(in,,sizeof(in));
while(!que1.empty()) que1.pop();
while(!que2.empty()) que2.pop();
for(int i=;i<MAX_N;i++) vec[i].clear();
for(int i=;i<N;i++)
{
scanf("%d",&res[i]);
}
for(int i=;i<M;i++)
{
int a,b;
scanf("%d%d",&a,&b);
vec[b].push_back(a);
in[a] ++;
}
for(int i=;i<N;i++)
{
if(in[i] == )
{
if(res[i] == ) que1.push(i);
else if(res[i] == ) que2.push(i);
} }
int ans = ;
int cnt = N;
while(cnt > )
{
while(!que1.empty())
{ int t = que1.front();que1.pop();
cnt --;
for(int i=;i<vec[t].size();i++)
{
in[vec[t][i]]--;
if(in[vec[t][i]] == )
{
if(res[vec[t][i]] == ) que2.push(vec[t][i]);
else que1.push(vec[t][i]);
}
}
}
if(!que2.empty()) ans ++;
while(!que2.empty())
{
int t = que2.front();que2.pop();
cnt --;
for(int i=;i<vec[t].size();i++)
{
in[vec[t][i]]--;
if(in[vec[t][i]] == )
{
if(res[vec[t][i]] == ) que2.push(vec[t][i]);
else que1.push(vec[t][i]);
}
}
}
}
cout<<ans<<endl;
}
return ;
}

Codeforces 909E. Coprocessor (拓扑、模拟)的更多相关文章

  1. CodeForces 909E Coprocessor(无脑拓扑排序)

    You are given a program you want to execute as a set of tasks organized in a dependency graph. The d ...

  2. Codeforces 909E(Coprocessor,双队列维护)

    题意:给出n个待处理的事件(0 ~n-1),再给出了n个标(0表示只能在主处理器中处理这个事件,1表示只能在副处理器中处理这个事件),处理器每次能处理多个任务.每个事件有关联,如果一个任务要在副处理器 ...

  3. CodeForces 909E Coprocessor

    题解. 贪心,拓扑排序. 和拓扑排序一样,先把$flag$为$0$的点能删的都删光,露出来的肯定都是$flag$为$0$的,然后疯狂删$flag$为$0$的,这些会使答案加$1$,反复操作就可以了. ...

  4. Codeforces Round #455 (Div. 2) 909E. Coprocessor

    题 OvO http://codeforces.com/contest/909/problem/E CF455 div2 E CF 909E 解 类似于拓扑排序地进行贪心, 对于 Ei=0 并且入度为 ...

  5. Codeforces 738D. Sea Battle 模拟

    D. Sea Battle time limit per test: 1 second memory limit per test :256 megabytes input: standard inp ...

  6. Codeforces 626A Robot Sequence(模拟)

    A. Robot Sequence time limit per test:2 seconds memory limit per test:256 megabytes input:standard i ...

  7. CodeForces - 589D(暴力+模拟)

    题目链接:http://codeforces.com/problemset/problem/589/D 题目大意:给出n个人行走的开始时刻,开始时间和结束时间,求每个人分别能跟多少人相遇打招呼(每两人 ...

  8. Codeforces 767B. The Queue 模拟题

    B. The Queue time limit per test:1 second memory limit per test:256 megabytes input:standard input o ...

  9. Codeforces 510C (拓扑排序)

    原题:http://codeforces.com/problemset/problem/510/C C. Fox And Names time limit per test:2 seconds mem ...

随机推荐

  1. 心灵鸡汤[all]

    1. [iPhone 有哪些非常有必要下载的 App] 2. 相 信 自 己 3. 英语四级作文模板 4. 比尔盖茨的人生忠告 5. 李嘉诚 <Are you ready> 6. 李嘉诚语 ...

  2. __iter__的有无

    迭代器和生成器 1.迭代器 我们之前⼀直在⽤可迭代对象进⾏迭代操作. 那么到底什么是可迭代对象.⾸先我们先回顾⼀下⽬前我们所熟知的可迭代对象有哪些: str, list, tuple, dict, s ...

  3. October 04th 2017 Week 40th Wednesday

    We teach people how to remember, we never teach them how to grow. 我们教会人们如何记忆,却从来不教他们如何成长. Without pr ...

  4. linux_bc命令

    bc 命令:     bc 命令是用于命令行计算器. 它类似基本的计算器. 使用这个计算器可以做基本的数学运算. 语法:  语法是      bc [命令开关]命令开关:      -c 仅通过编译. ...

  5. BZOJ2729:[HNOI2012]排队(组合数学)

    Description 某中学有 n 名男同学,m 名女同学和两名老师要排队参加体检.他们排成一条直线,并且任意两名女同学不能相邻,两名老师也不能相邻,那么一共有多少种排法呢?(注意:任意两个人都是不 ...

  6. 从ByteBuffer中解析整数

    前言   在解析Redis返回的消息中,有类似 $5\r\nredis\r\n的数据返回,当我们解析这种数据的时候,先解析出5这个数字,然后在取后续的5长度的字符串.当时在解析数字这块卡住了,于是看了 ...

  7. Python pip常用指令

    pip listpip list --outdatedpip list --outdated | grep Jinja2pip uninstall pycurlpip show pycurlpip i ...

  8. 使用mongodump及mongorestore备份及恢复数据

    mongodump及mongorestore是用于备份和恢复mongodb数据库的两个命令,位于mongodb安装目录的bin文件夹下. mongodump导出的备份文件为二进制格式,每一个文档的对应 ...

  9. Java反射学习三

    反射与数组 java.lang.Array类提供了动态创建和访问数组元素的各种静态方法. 例程ArrayTester1类的main()方法创建了一个长度为10的字符串数组,接着把索引位置为5的元素设为 ...

  10. nodeJs搭建简单服务器

    实现简单的例子:hello word 把第一个文件命名为server.js 在server.js里写入 var http  = require("http"); http.crea ...