POJ PKU 3687 topsort
(2010-05-07 14:27:47)
标签:
pojpku3687it |
分类: 杂题 |
题目描述:
n个球,每个球的重量分别从1到n。
让你把这n个球排成一列,但是给你m个限制条件。
每个条件有两个数字a和b。
表示排在a位置的球重量需要小于排在b位置的球的重量。
满足m个条件下,让这个排列的字典序最小。
解题报告:
加一些判断和改进的top排序。
g[a][b] = 1;
cd[a] .
表示a到b有边,即a < b。
同时a的出度(cd)加一。
排序过程:
每次只确定最后一个位置n,即从出度为0的球里面选一个重量最大球c的,排在n位置。n--。
然后凡是g[i][c] == 1的球i,出度--。
循环n次即可。
证明:
贪心,我也不太清楚为什么,求大牛正解!
代码如下:
#include<iostream>
#include<algorithm>
using namespace std;
#define size 201
int t, n, m, a, b, x[size][size], cd[size], que[size],
ans[size];;
bool vst[size];
bool judge()
{