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

相关推荐

投递腾讯等公司10个岗位
点赞 评论 收藏
转发
牛客网
牛客企业服务