wenbao與拓撲排序

2022-04-17 04:08:37 字數 4427 閱讀 6436

@  dfs

@  小資料map存圖

1

intmark[maxn], map[maxn][maxn], aim[maxn], cot;

2bool dfs(intx)9

}10 mark[x] = 1

;11 aim[cot--] =x;

12return

true;13

}14inttopo()21}

22return

true

;23 }

@  大資料鄰接表

1

intmark[maxn], aim[maxn], cot;

2 vectort[maxn];3//

注意如果有多組輸入時要清空vector4//

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

7bool dfs(int

x)13 mark[x] = 1

;14 aim[cot--] =x;

15return

true;16

}17inttopo()24}

25return

true

;26 }

@  while

@  小資料map

1

const

int maxn = 1e5+10

;2 vectort[maxn];

3int

n, m, map[maxn][maxn], num[maxn];

4void

topo()

11 vis[i] --;

12 t++;13}

14}15 }

@  大資料鄰接表

1

const

int maxn = 1e5+10

;2 vectort[maxn];

3int n, m, vis[maxn], num[maxn], sum = 0;4

void

topo()

13 vis[i] --;

14 sum += num[i]%mod, sum %=mod;

15 t++;16}

17}18 }

1 #include 2 #include 3 #include 

4using

namespace

std;

5const

int maxn = 502;6

intmap[maxn][maxn], v[maxn], c[maxn];

7int

n, m;

8void

toposort()

18break;19

}20}21

}22}23

intmain()34}

35toposort();

36for(int i = 0; i < n; i++)42}

43return0;

44 }

輸入單詞判斷是否可以找到乙個符合輸入順序的排序

樣例:輸入:

3

rivest

shamir

adleman

輸出:

bcdefghijklmnopqrsatuvwxyz
老劉的模板確實強

1 #include 2 #include 

3 #include

4using

namespace

std;

5const

int maxn = 555;6

string

str1, str2, str3;

7char a = ;

8int mark[maxn], map[maxn][maxn]=, v[maxn];910

bool dfs(int

u)18

//cout<19 mark[a[u]] = 1; str3 +=a[u];

20//

cout<21

return

true;22

}2324bool

toposort()31}

32return

true;33

}3435int

main()

53else num++;54}

55//

cout<56

if(num==str2.length()&&str1.length()>str2.length()) flag = 0

;57 str1 =str2;58}

59//

cout<60

if(flag&&toposort())

64else

67return0;

68 }

開始a---z的字母預處理出了錯,調了半天的bug。。。。。。。。。。。。不想說話;;;;

1 #include 2 #include 3 #include 

4 #include

5using

namespace

std;

6const

int maxn = 555;7

int map[maxn][maxn] = , v[maxn] = ;

8string

str3;

9char a=;

10bool

toposort()26}

27break;28

}29}30

if(flag == 0) return

false

; 31}32

return

true;33

}34intmain()

53break;54

}55else num++;56}

57if(num == str2.size() && str1.size() > str2.size()) flag = 0

;58 str1 =str2;59}

60if(flag &&toposort())

63else

66return0;

67 }

當資料量大的時候,最好的辦法當然是鄰接表(二維陣列存不下),那麼重點來了,是用while呢還是dfs呢?最好是用dfs。。。。啦啦啦啦啦啦啦~~~~~

1 #include 

2 #include 3 #include 4

using

namespace

std;

5const

int maxn = 1e5+10;6

intt, n, m, a, b;

7int

mark[maxn];

8 vectort[maxn];

9int dfs(int

x)15 mark[x] = 1;16

return

true;17

}18inttopo()24}

25return

true;26

}27intmain()

34for(int i = 0; i < m; i++)

38 cout<<(topo() ? "

correct

" : "

wrong

")<40return0;

41 }

1 #include 2 #include 

3 #include 4

using

namespace

std;

5const

int maxn = 1e5+10;6

const

int mod = 142857

;7 vectort[maxn];

8int n, m, k, a, vis[maxn], num[maxn], sum = 0

, x, y;

9void

topo()

18 vis[i] --;

19 sum += num[i]%mod, sum %=mod;

20 t++;21}

22}23}

24int

main()

27for(int i = 0; i < m; i++)

32topo();

33 printf("

%d\n

", sum%mod);

34return0;

35 }

只有不斷學習才能進步!

拓撲排序與AOV

在乙個表示工程的有向圖中,用頂點表示活動,用弧表示活動之間的優先關係,稱這樣的有向圖為頂點表示活動的網,即aov網 activity on vertex network aov網中的弧表示活動之間存在某種制約關係。aov網中不能出現迴路。測試aov網是否存在迴路的方法就是對aov網進行拓撲排序。設g...

wenbao與鄰接表

結構體儲存 1 struct edge 2edge maxn 5int head maxn 6void addedge int x,int y,int val 7 呼叫1 void use int x 7 vector儲存 1 include 2 include 3 struct edge8 9 v...

wenbao與擴充套件kmp

給定兩個字串s和t 長度分別為n和m 下標從0開始,定義extend i 等於s i s n 1 與t的最長公共字首的長度,求出所有的extend i next i t i t m 1 與t的最長公共字首長度 extend i s i s n 1 與t的最長公共字首的長度。1 c c 模板 2 in...