第三题: #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

相关推荐

zzzzhz:兄弟你先猛猛投简历至少三百家,能约到面试就去面。最近可以速成智能小车,智慧家居烂大街的项目,不需要自己写,只需要把里面的代码讲解看明白就行。把其中涉及到的八股文都拿出来单独背一下,我去年找工作就一个智能小车智慧家居找了10k差不多。
点赞 评论 收藏
分享
牛客网
牛客网在线编程
牛客网题解
牛客企业服务