hdu--1285 && 4857 --正向 || 逆向拓扑排序 && 优先队列
2014-08-11 19:35
239 查看
头太晕了 喝了太多 ..
就想提一点 对于 拓扑排序的这2题 为什么一个是正向 一个是逆向
主要是看题目要求 因为拓扑排序的结果总是有很多种存在的
一般来说 它会让你输出它指定要求的形式的答案
那么 如果是按字典序输出 就是 greater<int> 情况下的优先队列 并且 正向
如果是尽量使小的数字 靠前输出 而不是追求 字典序 可以考虑 逆向拓扑 逆向输出
但 这些都不是唯一的 一定要分析好题目
曾经 看过一个讲动态规划的word 说拓扑是为DP作准备的 似乎有点道理
这两题 代码 实在太相像了 我都嫌丢人了..........
View Code
today:
一年之前 我喝醉了 你陪我去南湖边吹风
一年之后 我喝醉了 我陪他们去ktv .....
就想提一点 对于 拓扑排序的这2题 为什么一个是正向 一个是逆向
主要是看题目要求 因为拓扑排序的结果总是有很多种存在的
一般来说 它会让你输出它指定要求的形式的答案
那么 如果是按字典序输出 就是 greater<int> 情况下的优先队列 并且 正向
如果是尽量使小的数字 靠前输出 而不是追求 字典序 可以考虑 逆向拓扑 逆向输出
但 这些都不是唯一的 一定要分析好题目
曾经 看过一个讲动态规划的word 说拓扑是为DP作准备的 似乎有点道理
这两题 代码 实在太相像了 我都嫌丢人了..........
//逆向拓扑排序 #include <iostream> #include <cstring> #include <queue> #include <vector> using namespace std; int n; const int size = 30010; int in[size]; int arr[size]; vector<int>ve[size]; priority_queue<int,vector<int>,less<int> >q; void init( ) { for( int i = 1 ; i<=n ; i++ ) { ve[i].clear(); in[i] = 0; } } void topo( ) { int cnt = 0; for( int i = 1 ; i<=n ; i++ ) { if( in[i] == 0 ) { q.push(i); } } while( !q.empty() ) { int now = q.top(); q.pop(); arr[cnt++] = now; for( int i = 0 ; i<ve[now].size() ; i++ ) { int u = ve[now][i]; in[u] --; if( in[u] == 0 ) { q.push(u); } } } for( int i = cnt-1 ; i>=1 ; i-- ) { cout << arr[i] << " "; } cout << arr[0] << endl; } int main() { cin.sync_with_stdio(false); int t , m , x , y; cin >> t; while( t-- ) { cin >> n >> m; init( ); while( m-- ) { cin >> x >> y; in[x] ++; ve[y].push_back(x); } topo(); } return 0; }
View Code
today:
一年之前 我喝醉了 你陪我去南湖边吹风
一年之后 我喝醉了 我陪他们去ktv .....
相关文章推荐
- hdu 4857/BestCoder Round#1 1001(拓扑排序+逆向建图)
- HDU_1285_拓扑排序(优先队列)
- HDU 1285--确定比赛名次【拓扑排序 && 邻接表实现】
- hdu 4857 逃生(逆向拓扑排序)(STL应用)
- HDU - 1285 确定比赛名次 &&UVA - 10305 Ordering Tasks (拓扑排序)
- HDU 4857 (反向拓扑排序 + 优先队列)
- HDU 4857 (反向拓扑排序 + 优先队列)
- hdu 4857 逃生(逆向拓扑排序)(STL应用)
- HDU 1285 确定比赛名次 + HDU 4857 逃生(拓扑排序由浅入深)
- 【HDU】1285--确定比赛名次(拓扑&&优先队列)
- HDU 1285--确定比赛名次【拓扑排序 && 邻接表实现】
- HDU 4857--逃生【拓扑排序 && 反向拓扑】
- hdu 4857 逆向建图+拓扑排序 ***
- hdu 4857 逆向拓扑排序+逆向输出
- Hdu 1242 & Zoj 1649 Rescue (优先队列+BFS)
- hdu 1285 确定比赛名次 ( 拓扑排序 )
- hdu 1285(确定比赛名次)拓扑排序
- hdu 1285 确定比赛名次 (简单的拓扑排序)
- HDU 1285 确定比赛名次 拓扑排序
- 拓扑排序模版--hdu 1285 确定比赛名次