題意:給你乙個有向圖,輸出它的拓撲排序,要求1盡量在前面,滿足1在前面的情況下2盡量在前面,上面情況3盡量在前面… 依次類推;
分析:這樣考慮,假如編號最小的幾個點分別在幾條不相交路徑,且他們前面都有其他店,例如9-8-1-0,7-6-2-0,5-4-3-0,這樣三條路徑交於0點,那麼顯然你直接從三個入度為0的點9,7,5來考慮,是得不出答案的,那麼大膽考慮一下反著來呢;反向建圖,優先考慮當前入度為0(反向建圖的入度,即原圖的出度)的點中編號最大的,把它放入結果集合,然後倒序輸出即可;
**:注意不能用cin讀,會tle;
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using
namespace std;
#define inf 0x7f7f7f7f
#define maxn 100411
#define n 30500
#define mod 100003
typedef
long
long ll;
typedef
struct
edge;
edge e[
2*maxn]
;int cnt,head[n]
;inline
void
add(
int u,
int v)
inline
void
write
(int x)
inline
intread()
while
(c>=
'0'&&c<=
'9')
return x*f;
}int n,m,x,y,in[n]
,top[n]
,num;
void
topsort()
while
(!q.
empty()
)}}int t;
intmain()
topsort()
;for
(int i=num-
1;i>
0;i--
) cout<<<
" ";
cout<<}return0;
}
(僅供個人理解) HDU 4857 逃生 拓撲排序
time limit 1000ms memory limit 32768kb 64bit io format i64d i64udescription 糟糕的事情發生啦,現在大家都忙著逃命。但是逃命的通道很窄,大家只能排成一行。現在有n個人,從1標號到n。同時有一些奇怪的約束條件,每個都形如 a必須...
HDU 4857 逃生 (拓撲排序)
糟糕的事情發生啦,現在大家都忙著逃命。但是逃命的通道很窄,大家只能排成一行。現在有n個人,從1標號到n。同時有一些奇怪的約束條件,每個都形如 a必須在b之前。同時,社會是不平等的,這些人有的窮有的富。1號最富,2號第二富,以此類推。有錢人就賄賂負責人,所以他們有一些好處。負責人現在可以安排大家排隊的...
逃生 HDU 4857 拓撲排序
糟糕的事情發生啦,現在大家都忙著逃命。但是逃命的通道很窄,大家只能排成一行。現在有n個人,從1標號到n。同時有一些奇怪的約束條件,每個都形如 a必須在b之前。同時,社會是不平等的,這些人有的窮有的富。1號最富,2號第二富,以此類推。有錢人就賄賂負責人,所以他們有一些好處。負責人現在可以安排大家排隊的...