HDU 4857 逃生(拓扑排序)
2014-07-20 22:45
260 查看
HDU 4857 逃生
题目链接题意:中文题
思路:逆拓扑排序,利用优先队列,每次先取度数0,标号最大的,进行拓扑排序,最后再反向输出
代码:
#include <cstdio>
#include <cstring>
#include <vector>
#include <queue>
using namespace std;
const int N = 30005;
int t, n, m, ans
, vis
, an;
vector<int> g
;
int i;
void solve() {
priority_queue<int> Q;
for (int i = 1; i <= n; i++)
if (!vis[i]) Q.push(i);
while (!Q.empty()) {
int now = Q.top();
Q.pop();
for (int i = 0; i < g[now].size(); i++) {
vis[g[now][i]]--;
if (vis[g[now][i]] == 0) Q.push(g[now][i]);
}
ans[an++] = now;
}
}
int main() {
scanf("%d", &t);
while (t--) {
an = 0;
memset(vis, 0, sizeof(vis));
scanf("%d%d", &n, &m);
for (i = 1; i <= n; i++)
g[i].clear();
int u, v;
while (m--) {
scanf("%d%d", &u, &v);
g[v].push_back(u);
vis[u]++;
}
solve();
for (int i = an - 1; i > 0; i--) printf("%d ", ans[i]);
printf("%d\n", ans[0]);
}
return 0;
}
相关文章推荐
- HDU 4857 逃生(拓扑排序)
- hdu 4857 逃生(拓扑排序)
- HDU4857——逃生(反向建图+拓扑排序)(BestCoder Round #1)
- HDU 4857 逃生(拓扑排序 小的尽量在前)
- 反向拓扑排序 HDU 4857 逃生
- hdu 4857 逃生(拓扑排序)
- hdu-4857-逃生-拓扑排序
- hdu 4857 逃生 (拓扑排序)
- hdu 4857 逃生(拓扑排序)
- hdu 4857 逃生(拓扑排序)
- hdu 4857 逃生(拓扑排序)
- HDU-4857-逃生【拓扑排序】
- hdu 4857 逃生(拓扑排序)
- HDU - 4857 逃生(反向建图 + 拓扑排序)
- HDU 4857--逃生【拓扑排序 && 反向拓扑】
- hdu 4857 逃生(拓扑排序)
- [HDU](4857)逃生 ---拓扑排序(反向)+STL优先级队列(图)
- hdu 4857 逃生 拓扑排序
- hdu 4857 逃生(拓扑排序)
- HDU-4857逃生(反向拓扑排序)(重点是思想)