P1137 旅行計畫 拓撲排序

2022-02-15 15:27:56 字數 1573 閱讀 9842

小明要去乙個國家旅遊。這個國家有n個城市,編號為1~n,並且有m條道路連線著,小明準備從其中乙個城市出發,並只往東走到城市i停止。

所以他就需要選擇最先到達的城市,並制定一條路線以城市i為終點,使得線路上除了第乙個城市,每個城市都在路線前乙個城市東面,並且滿足這個前提下還希望遊覽的城市盡量多。

現在,你只知道每一條道路所連線的兩個城市的相對位置關係,但並不知道所有城市具體的位置。現在對於所有的i,都需要你為小明制定一條路線,並求出以城市i為終點最多能夠遊覽多少個城市。

輸入格式:

輸入的第1行為兩個正整數n, m。

接下來m行,每行兩個正整數x, y,表示了有一條連線城市x與城市y的道路,保證了城市x在城市y西面。

輸出格式:

輸出包括n行,第i行包含乙個正整數,表示以第i個城市為終點最多能遊覽多少個城市。

輸入樣例#1:

5 6

1 21 3

2 32 4

3 42 5

輸出樣例#1:

123

43

均選擇從城市1出發可以得到以上答案。

對於20%的資料,n ≤ 100;

對於60%的資料,n ≤ 1000;

對於100%的資料,n ≤ 100000,m ≤ 200000。

1/*2

好吧 拓撲排序

3我用的spfa求最長路 當然也是拓撲思想

4入隊操作注意一下 如果下乙個點入度為0 就入隊

5否則會t乙個點 6*/

7 #include 8 #include 9 #include 10

11const

int maxn=100010;12

const

int inf=0x3f3f3f3f;13

14int

n,m;

1516

int dis[maxn],in

[maxn];

1718

bool

vis[maxn];

1920

struct

node ;

24 node e[maxn<<1

];25

26int

head[maxn],tot;

2728 std::queueq;

2930 inline void read(int&x)

3637 inline void add(int x,int

y) 42

43 inline void

spfa() 54}

55}5657

inthh()

64for(int i=1;i<=n;++i)

65if(!in[i]) q.push(i),dis[i]=1;66

spfa();

67for(int i=1;i<=n;++i)

68 printf("

%d\n

",dis[i]);

69return0;

70}7172

int sb=hh();

73int main()

**

P1137 旅行計畫 拓撲排序

p1137 旅行計畫 小明要去乙個國家旅遊。這個國家有n個城市,編號為1 n,並且有m條道路連線著,小明準備從其中乙個城市出發,並只往東走到城市i停止。所以他就需要選擇最先到達的城市,並制定一條路線以城市i為終點,使得線路上除了第乙個城市,每個城市都在路線前乙個城市東面,並且滿足這個前提下還希望遊覽...

P1137 旅行計畫

題目描述 小明要去乙個國家旅遊。這個國家有n個城市,編號為1 n,並且有m條道路連線著,小明準備從其中乙個城市出發,並只往東走到城市i停止。所以他就需要選擇最先到達的城市,並制定一條路線以城市i為終點,使得線路上除了第乙個城市,每個城市都在路線前乙個城市東面,並且滿足這個前提下還希望遊覽的城市盡量多...

P1137 旅行計畫

小明要去乙個國家旅遊。這個國家有n個城市,編號為1 n,並且有m條道路連線著,小明準備從其中乙個城市出發,並只往東走到城市i停止。所以他就需要選擇最先到達的城市,並制定一條路線以城市i為終點,使得線路上除了第乙個城市,每個城市都在路線前乙個城市東面,並且滿足這個前提下還希望遊覽的城市盡量多。現在,你...