@ dfs
@ 小資料map存圖
1intmark[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 }
@ 大資料鄰接表
1intmark[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
1const
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 }
@ 大資料鄰接表
1const
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 #include4using
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 #include3 #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 #include4 #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 #include2 #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 #include3 #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...