10305 - Ordering Tasks
Time limit: 3.000 seconds
模板题。注意倒着输出。
模板:
/*0.015s*/
#include<bits/stdc++.h>
using namespace std;
const int maxn = 101;
vector<int> v[maxn];
bool vis[maxn];
int ans[maxn], cnt;
void dfs(int i)
{
vis[i] = true;
for (vector<int>::iterator iter = v[i].begin(); iter != v[i].end(); ++iter)
if (!vis[*iter]) dfs(*iter);
ans[cnt++] = i;
}
int main()
{
int n, m, i, a, b;
while (scanf("%d%d", &n, &m), n)
{
for (i = 1; i <= n; ++i) v[i].clear();
while (m--)
{
scanf("%d%d", &a, &b);
v[a].push_back(b);
}
memset(vis, 0, sizeof(vis));
cnt = 0;
for (i = 1; i <= n; ++i)
if (!vis[i]) dfs(i);
for (i = n - 1; i; --i)
printf("%d ", ans[i]);
printf("%d\n", ans[0]);
}
return 0;
}