关注
第三题: #include <iostream>
#include <vector>
#include <set>
#include <map>
#include <algorithm>
using namespace std;
int main()
{
int m, n, k;
cin >> m >> n >> k;
vector<int> tmp;
map<int, vector<int> > datas; // int为序号,vector为依赖他的结点
for (int i = 0; i <= m; i++) {
vector<int> tmp;
datas[i] = tmp;
}
vector<int> yilai(m + 1, 0); // 结点i是否有依赖,0为无依赖可以直接操作
vector<int> done(m + 1, 0); // 结点i是否已完成,0为未完成
int left, right;
for (int i = 0; i < k; i++) {
cin >> left >> right;
yilai[left] = 1;
datas[right].push_back(left);
}
int ans = 0;
int conutOfDone = 0; // 当前已完成计数
while (conutOfDone != m) {
int conutoftodo = 0;
vector<int> deal;
for (int i = 1; i <= m; i++) {
if (yilai[i] == 0 && done[i] == 0) {
conutoftodo++;
conutOfDone++;
deal.push_back(i); // 存储当前待完成结点,用于更新各数组
}
}
if (conutoftodo == 0 && conutOfDone != n) {
cout << "E" << endl;
return -1;
}
else if (conutoftodo <= n)
ans++;
else if (conutoftodo > n) {
if (conutoftodo % n == 0)
ans = ans + conutoftodo / n;
else
ans = ans + conutoftodo / n + 1;
}
for (int i = 0; i < deal.size(); i++) { // 更新各个数组
done[deal[i]] = 1;
vector<int> ttt = datas[deal[i]];
for (int j = 0; j < ttt.size(); j++)
yilai[ttt[j]] = 0;
}
}
cout << ans << endl;
return 0;
}
查看原帖
点赞 4
相关推荐
点赞 评论 收藏
分享
12-15 11:27
门头沟学院 Java 点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 什么是优秀的实习经历 #
9045次浏览 222人参与
# 实习简历求拷打 #
15102次浏览 180人参与
# 被上班搭子“传染”了哪些习惯 #
6004次浏览 100人参与
# 作业帮求职进展汇总 #
83710次浏览 550人参与
# 工作后,你落下了哪些病根 #
14258次浏览 193人参与
# 秋招被挂春招仍然能投的公司 #
7366次浏览 103人参与
# 实习要如何选择和准备? #
128470次浏览 1485人参与
# 外包能不能当跳板? #
54222次浏览 256人参与
# 诺瓦星云求职进展汇总 #
233451次浏览 1736人参与
# mt对你说过最有启发的一句话 #
38122次浏览 452人参与
# 公司情报交流地 #
126558次浏览 1227人参与
# 为了找工作你花了哪些钱? #
74825次浏览 361人参与
# 你觉得机械有必要实习吗 #
69751次浏览 485人参与
# 投格力的你,拿到offer了吗? #
153208次浏览 819人参与
# 一起聊美团 #
307459次浏览 1764人参与
# 摸鱼被leader发现了怎么办 #
103055次浏览 654人参与
# 京东开奖 #
631871次浏览 3180人参与
# 秋招特别不鸣谢 #
16309次浏览 186人参与
# 考研失败就一定是坏事吗? #
202011次浏览 1382人参与
# 选实习,你更看重哪方面? #
14851次浏览 223人参与

叮咚买菜工作强度 163人发布