10305 - Ordering Tasks (UVA)

题目链接如下:

Online Judge

有一个非常刁钻的卡点,第16行要是在&& n后面加上 && m的话,就会WA...因为m可以为0.

我的代码如下:

#include <cstdio>
#include <vector>
#include <algorithm>
#include <set>
const int maxx = 101;
// #define debugint n, m, u, v;
int prev[maxx];int main(){#ifdef debugfreopen("0.txt", "r", stdin);freopen("1.txt", "w", stdout);#endifwhile (scanf("%d %d", &n, &m) == 2 && n){std::fill(prev, prev + n + 1, 0);std::vector<std::set<int>> vec(n + 1);std::vector<int> ans;for (int i = 0; i < m; ++i){scanf("%d %d", &u, &v);if (!vec[u].count(v)){vec[u].insert(v);prev[v]++;}}do {for (int i = 1; i <= n; ++i){if (!prev[i]){ans.push_back(i);prev[i]--;for (auto it = vec[i].begin(); it != vec[i].end(); ++it){prev[*it]--;}}}} while (ans.size() < n);for (int i = 0; i < n; ++i){printf("%d%s", ans[i], i == n - 1 ? "\n" : " ");}}#ifdef debugfclose(stdin);fclose(stdout);#endifreturn 0;
}