杭電3342Legal or Not (拓撲排序)

2021-06-17 18:16:14 字數 841 閱讀 1108

拓撲排序簡單來說就是把乙個圖的所有節點排序,使得每一條有向邊(u,v)對應的u都排在v的前面。 

拓撲排序最大的用途就是判斷乙個有向圖是否有環,當然判斷還有一種方法就是floyd演算法。

如果用鄰接表的話拓撲排序的時間複雜度是o(n*e),鄰接矩陣是o(n^2),n表示頂點數,e表示邊數,floyd時間複雜度是o(n^3)。 性質

1、 拓撲排序在有向無環圖中才能排出有效的序列,否則能判斷該有向圖有環。

2、如果輸入的有向圖中的點,不存在入度為0的點,則該有向圖存在迴路

3、如果存在的入度為0的點大於乙個,則該有向圖肯定不存在乙個可以確定的拓撲序列但並不妨礙拓撲排序 

題意:a是b的老師,b是c的老師,那麼a是c的老師。如果a是b的老師,b是c的老師 ,c是a的老師,這樣是不合法的。

思路:拓補排序。(既可以排名次)

連通法#include-----floyd時間複雜度是o(n^3)。

#include

int f[1000][1000];

int main()

{int m,n,i,j,k,h,r,p;

while(scanf("%d%d",&m,&n),m||n)

{p=0;

memset(f,0,sizeof(f));

for(i=0;i---------鄰接矩陣是o(n^2

#include

int map[501][501];

int degree[501];

int m,n;

int toposort()

{int i,j,r;

for(i=0;i

杭電2048 杭電2049錯排公式

這兩題只要知道錯排公式就可以ac了。題目杭電2048 和 杭電2049 錯排公式的說明在這裡 m n n 1 m n 2 m n 1 這個就是遞推公式。杭電2048只有有乙個這個公式就可以了,2049還不夠,還要有用組合數學。杭電2048的 include includeusing namespac...

杭電2014 2020總結

昨天天氣不太好,一整天都沒有陽光,導致我的心情也有點鬱悶,沒有把昨天本該做的題做完,該寫的部落格寫完,就把任務拖到了今天了。2014 本題需要用到累加和遍歷求極值的技巧。用大一時王sir的話說,就是開設乙個 擂台 遍歷一遍資料,誰最 極 的,誰就登上擂台。如果要求記錄極值的位置,還需要在開設乙個記錄...

杭電2028 2032總結

本次練習是c語言程式設計練習的最後一套。2028 本題的核心是編寫乙個求最大公約數的函式 利用歐幾里得演算法 求得了兩個數的最大公約數,就可以求得兩個數的最小公倍數。多個數的最小公倍數,利用如下原理求得,求a1,a2.an 的最小公倍數,令n是 a1,a2.an 1 的最小公倍數,則要求的最小公倍數...